From 1f2e4e96dd1342fbfc49fcb60d0a43300c9c8952 Mon Sep 17 00:00:00 2001 From: Xor290 Date: Wed, 18 Feb 2026 21:52:32 +0100 Subject: [PATCH] chore: update --- .github/workflows/frontend-admin-build.yml | 4 + ansible/group_vars/all/vars.yml | 38 +- ansible/inventory/host.ini | 22 +- ...ntend-backend.yml => playbook-backend.yml} | 247 +++-- ansible/playbook-nginx.yml | 108 --- ansible/playbook.yml | 195 ++-- ansible/templates/backend.service.j2 | 16 + .../templates/custom-rules.conf.j2 | 0 ansible/templates/nginx.conf.j2 | 179 +++- backend/gestion/main.go | 6 +- frontend-admin/.gitignore | 5 + frontend-admin/node_modules/.bin/fingerprint | 2 +- .../node_modules/.package-lock.json | 163 +--- .../node_modules/semver/README.md | 5 +- .../node_modules/semver/bin/semver.js | 2 +- .../node_modules/semver/functions/diff.js | 2 +- .../node_modules/semver/internal/re.js | 4 +- .../node_modules/semver/package.json | 8 +- .../node_modules/semver/ranges/subset.js | 2 +- .../node_modules/expo/android/build.gradle | 4 +- .../expo/bundledNativeModules.json | 6 +- .../expo/node_modules/@expo/cli/build/bin/cli | 2 +- .../metro/DevToolsPluginWebsocketEndpoint.js | 10 +- .../DevToolsPluginWebsocketEndpoint.js.map | 2 +- .../start/server/metro/instantiateMetro.js | 4 +- .../server/metro/instantiateMetro.js.map | 2 +- .../utils/telemetry/clients/FetchClient.js | 2 +- .../src/utils/telemetry/utils/context.js | 2 +- .../expo/node_modules/@expo/cli/package.json | 4 +- .../expo/node_modules/semver/README.md | 5 +- .../expo/node_modules/semver/bin/semver.js | 2 +- .../node_modules/semver/functions/diff.js | 2 +- .../expo/node_modules/semver/internal/re.js | 4 +- .../expo/node_modules/semver/package.json | 8 +- .../expo/node_modules/semver/ranges/subset.js | 2 +- frontend-admin/node_modules/expo/package.json | 6 +- frontend-admin/node_modules/expo/template.tgz | Bin 367326 -> 367326 bytes .../node_modules/semver/README.md | 5 +- .../node_modules/semver/bin/semver.js | 2 +- .../node_modules/semver/functions/diff.js | 2 +- .../node_modules/semver/internal/re.js | 4 +- .../node_modules/semver/package.json | 8 +- .../node_modules/semver/ranges/subset.js | 2 +- .../AnimationFrameBatchinator.cpp | 30 +- .../AnimationFrameBatchinator.h | 22 +- .../NativeModules/JSIWorkletsModuleProxy.cpp | 450 ++++++--- .../NativeModules/JSIWorkletsModuleProxy.h | 13 +- .../NativeModules/WorkletsModuleProxy.cpp | 35 +- .../NativeModules/WorkletsModuleProxy.h | 20 +- .../Registries/EventHandlerRegistry.cpp | 18 +- .../Registries/EventHandlerRegistry.h | 16 +- .../Registries/WorkletRuntimeRegistry.cpp | 2 - .../Resources/CustomSerializableUnpacker.cpp | 24 - .../Common/cpp/worklets/Resources/Unpackers.h | 1 - .../cpp/worklets/Resources/ValueUnpacker.cpp | 2 +- .../Common/cpp/worklets/RunLoop/AsyncQueue.h | 14 - .../cpp/worklets/RunLoop/AsyncQueueImpl.cpp | 11 +- .../cpp/worklets/RunLoop/AsyncQueueImpl.h | 4 +- .../Common/cpp/worklets/RunLoop/EventLoop.cpp | 95 +- .../Common/cpp/worklets/RunLoop/EventLoop.h | 4 +- .../worklets/SharedItems/MemoryManager.cpp | 60 -- .../cpp/worklets/SharedItems/MemoryManager.h | 29 - .../cpp/worklets/SharedItems/Serializable.cpp | 264 ++++-- .../cpp/worklets/SharedItems/Serializable.h | 191 ++-- .../worklets/SharedItems/Synchronizable.cpp | 24 +- .../cpp/worklets/SharedItems/Synchronizable.h | 6 +- .../SharedItems/SynchronizableAccess.cpp | 9 +- .../Common/cpp/worklets/Tools/Defs.h | 12 - .../cpp/worklets/Tools/FeatureFlags.cpp | 3 - .../cpp/worklets/Tools/JSISerializer.cpp | 74 +- .../Common/cpp/worklets/Tools/JSISerializer.h | 11 +- .../Common/cpp/worklets/Tools/JSLogger.cpp | 38 +- .../Common/cpp/worklets/Tools/JSLogger.h | 14 +- .../Common/cpp/worklets/Tools/JSScheduler.cpp | 9 +- .../Common/cpp/worklets/Tools/JSScheduler.h | 6 +- .../worklets/Tools/SingleInstanceChecker.h | 5 +- .../cpp/worklets/Tools/VersionUtils.cpp | 8 +- .../worklets/Tools/WorkletEventHandler.cpp | 6 +- .../cpp/worklets/Tools/WorkletsJSIUtils.cpp | 16 +- .../cpp/worklets/Tools/WorkletsJSIUtils.h | 73 +- .../worklets/Tools/WorkletsSystraceSection.h | 40 +- .../cpp/worklets/Tools/WorkletsVersion.cpp | 16 +- .../cpp/worklets/Tools/WorkletsVersion.h | 4 +- .../RNRuntimeWorkletDecorator.cpp | 23 +- .../RNRuntimeWorkletDecorator.h | 11 +- .../worklets/WorkletRuntime/RuntimeBindings.h | 17 - .../worklets/WorkletRuntime/RuntimeData.cpp | 8 - .../cpp/worklets/WorkletRuntime/RuntimeData.h | 13 - .../worklets/WorkletRuntime/RuntimeHolder.h | 22 - .../cpp/worklets/WorkletRuntime/RuntimeKind.h | 4 +- .../WorkletRuntime/RuntimeManager.cpp | 60 +- .../worklets/WorkletRuntime/RuntimeManager.h | 24 +- .../WorkletRuntime/UIRuntimeDecorator.cpp | 10 +- .../WorkletRuntime/UIRuntimeDecorator.h | 4 +- .../WorkletRuntime/WorkletHermesRuntime.cpp | 48 +- .../WorkletRuntime/WorkletHermesRuntime.h | 35 +- .../WorkletRuntime/WorkletRuntime.cpp | 215 ++--- .../worklets/WorkletRuntime/WorkletRuntime.h | 183 +--- .../WorkletRuntime/WorkletRuntimeCollector.h | 2 +- .../WorkletRuntimeDecorator.cpp | 225 +++-- .../react-native-worklets/RNWorklets.podspec | 5 +- .../android/CMakeLists.txt | 42 +- .../android/build.gradle | 17 +- .../android/fix-prefab.gradle | 53 -- .../swmansion/worklets/WorkletsModule.java | 25 +- .../worklets/android/AndroidUIScheduler.cpp | 16 +- .../cpp/worklets/android/AndroidUIScheduler.h | 9 +- .../worklets/android/AnimationFrameCallback.h | 12 +- .../cpp/worklets/android/PlatformLogger.cpp | 2 - .../cpp/worklets/android/WorkletsModule.cpp | 53 +- .../cpp/worklets/android/WorkletsModule.h | 22 +- .../worklets/apple/AnimationFrameQueue.mm | 12 +- .../apple/AssertTurboModuleManagerQueue.h | 10 +- .../apple/worklets/apple/IOSUIScheduler.h | 3 +- .../apple/worklets/apple/WorkletsModule.mm | 65 +- .../react-native-worklets/bundleMode/index.js | 28 +- .../react-native-worklets/compatibility.json | 8 +- .../module/WorkletsModule/NativeWorklets.js | 124 ++- .../WorkletsModule/NativeWorklets.js.map | 2 +- .../WorkletsModule/NativeWorklets.native.js | 130 --- .../NativeWorklets.native.js.map | 1 - .../lib/module/callGuard.native.js | 30 - .../lib/module/callGuard.native.js.map | 1 - .../lib/module/debug/WorkletsError.js | 12 - .../lib/module/debug/WorkletsError.js.map | 1 - .../lib/module/debug/WorkletsError.native.js | 27 - .../module/debug/WorkletsError.native.js.map | 1 - .../lib/module/debug/checkCppVersion.js | 30 - .../lib/module/debug/checkCppVersion.js.map | 1 - .../lib/module/debug/errors.native.js | 69 -- .../lib/module/debug/errors.native.js.map | 1 - .../lib/module/debug/jsVersion.js | 9 - .../lib/module/debug/jsVersion.js.map | 1 - .../lib/module/debug/logger.js | 15 - .../lib/module/debug/logger.js.map | 1 - .../lib/module/debug/types.js | 2 - .../lib/module/debug/types.js.map | 1 - .../lib/module/deprecated.js | 4 +- .../lib/module/deprecated.js.map | 2 +- .../lib/module/featureFlags/featureFlags.js | 12 - .../module/featureFlags/featureFlags.js.map | 1 - .../featureFlags/featureFlags.native.js | 51 - .../featureFlags/featureFlags.native.js.map | 1 - .../lib/module/featureFlags/types.js | 12 - .../lib/module/featureFlags/types.js.map | 1 - .../react-native-worklets/lib/module/index.js | 32 +- .../lib/module/index.js.map | 2 +- .../lib/module/initializers/initializers.js | 21 - .../module/initializers/initializers.js.map | 1 - .../initializers/initializers.native.js | 198 ---- .../initializers/initializers.native.js.map | 1 - .../initializers/workletRuntimeEntry.js | 6 - .../initializers/workletRuntimeEntry.js.map | 1 - .../workletRuntimeEntry.native.js | 37 - .../workletRuntimeEntry.native.js.map | 1 - .../module/memory/bundleUnpacker.native.js | 47 - .../memory/bundleUnpacker.native.js.map | 1 - .../customSerializableUnpacker.native.js | 18 - .../customSerializableUnpacker.native.js.map | 1 - .../lib/module/memory/isSynchronizable.js | 7 - .../lib/module/memory/isSynchronizable.js.map | 1 - .../module/memory/isSynchronizable.native.js | 8 - .../memory/isSynchronizable.native.js.map | 1 - .../lib/module/memory/serializable.js | 18 - .../lib/module/memory/serializable.js.map | 1 - .../lib/module/memory/serializable.native.js | 631 ------------ .../module/memory/serializable.native.js.map | 1 - .../module/memory/serializableMappingCache.js | 11 - .../memory/serializableMappingCache.js.map | 1 - .../memory/serializableMappingCache.native.js | 29 - .../serializableMappingCache.native.js.map | 1 - .../lib/module/memory/synchronizable.js | 7 - .../lib/module/memory/synchronizable.js.map | 1 - .../module/memory/synchronizable.native.js | 9 - .../memory/synchronizable.native.js.map | 1 - .../memory/synchronizableUnpacker.native.js | 42 - .../synchronizableUnpacker.native.js.map | 1 - .../lib/module/memory/types.js | 12 - .../lib/module/memory/types.js.map | 1 - .../lib/module/memory/valueUnpacker.native.js | 61 -- .../module/memory/valueUnpacker.native.js.map | 1 - .../react-native-worklets/lib/module/mock.js | 86 -- .../lib/module/mock.js.map | 1 - .../lib/module/platformChecker.js | 8 - .../lib/module/platformChecker.js.map | 1 - .../lib/module/platformChecker.native.js | 4 - .../lib/module/platformChecker.native.js.map | 1 - .../lib/module/privateGlobals.d.js | 1 + .../lib/module/privateGlobals.d.js.map | 2 +- .../uiRuntime/requestAnimationFrame.js | 2 +- .../uiRuntime/requestAnimationFrame.js.map | 2 +- .../module/runLoop/workletRuntime/index.js | 12 +- .../runLoop/workletRuntime/index.js.map | 2 +- .../runLoop/workletRuntime/queueMicrotask.js | 2 +- .../workletRuntime/queueMicrotask.js.map | 2 +- .../runLoop/workletRuntime/setTimeout.js | 2 +- .../runLoop/workletRuntime/setTimeout.js.map | 2 +- .../lib/module/runtimeKind.js | 9 - .../lib/module/runtimeKind.js.map | 2 +- .../lib/module/runtimes.js | 103 +- .../lib/module/runtimes.js.map | 2 +- .../lib/module/runtimes.native.js | 139 --- .../lib/module/runtimes.native.js.map | 1 - .../module/specs/NativeWorkletsModule.js.map | 2 +- .../lib/module/specs/index.js | 4 +- .../lib/module/specs/index.js.map | 2 +- .../lib/module/threads.js | 342 ++++++- .../lib/module/threads.js.map | 2 +- .../lib/module/threads.native.js | 319 ------- .../lib/module/threads.native.js.map | 1 - .../react-native-worklets/lib/module/types.js | 5 - .../lib/module/types.js.map | 1 - .../lib/module/workletFunction.js | 5 +- .../lib/module/workletFunction.js.map | 2 +- .../WorkletsModule/NativeWorklets.d.ts | 3 +- .../WorkletsModule/NativeWorklets.d.ts.map | 2 +- .../WorkletsModule/NativeWorklets.native.d.ts | 3 - .../NativeWorklets.native.d.ts.map | 1 - .../WorkletsModule/workletsModuleProxy.d.ts | 6 +- .../workletsModuleProxy.d.ts.map | 2 +- .../lib/typescript/callGuard.native.d.ts | 4 - .../lib/typescript/callGuard.native.d.ts.map | 1 - .../lib/typescript/debug/WorkletsError.d.ts | 3 - .../typescript/debug/WorkletsError.d.ts.map | 1 - .../debug/WorkletsError.native.d.ts | 8 - .../debug/WorkletsError.native.d.ts.map | 1 - .../lib/typescript/debug/checkCppVersion.d.ts | 3 - .../typescript/debug/checkCppVersion.d.ts.map | 1 - .../lib/typescript/debug/errors.native.d.ts | 16 - .../typescript/debug/errors.native.d.ts.map | 1 - .../lib/typescript/debug/jsVersion.d.ts | 7 - .../lib/typescript/debug/jsVersion.d.ts.map | 1 - .../lib/typescript/debug/logger.d.ts | 5 - .../lib/typescript/debug/logger.d.ts.map | 1 - .../lib/typescript/debug/types.d.ts | 9 - .../lib/typescript/debug/types.d.ts.map | 1 - .../lib/typescript/deprecated.d.ts | 7 +- .../lib/typescript/deprecated.d.ts.map | 2 +- .../typescript/featureFlags/featureFlags.d.ts | 5 - .../featureFlags/featureFlags.d.ts.map | 1 - .../featureFlags/featureFlags.native.d.ts | 6 - .../featureFlags/featureFlags.native.d.ts.map | 1 - .../lib/typescript/featureFlags/types.d.ts | 20 - .../typescript/featureFlags/types.d.ts.map | 1 - .../lib/typescript/index.d.ts | 24 +- .../lib/typescript/index.d.ts.map | 2 +- .../typescript/initializers/initializers.d.ts | 2 - .../initializers/initializers.d.ts.map | 1 - .../initializers/initializers.native.d.ts | 17 - .../initializers/initializers.native.d.ts.map | 1 - .../initializers/workletRuntimeEntry.d.ts | 2 - .../initializers/workletRuntimeEntry.d.ts.map | 1 - .../workletRuntimeEntry.native.d.ts | 14 - .../workletRuntimeEntry.native.d.ts.map | 1 - .../memory/bundleUnpacker.native.d.ts | 7 - .../memory/bundleUnpacker.native.d.ts.map | 1 - .../customSerializableUnpacker.native.d.ts | 3 - ...customSerializableUnpacker.native.d.ts.map | 1 - .../typescript/memory/isSynchronizable.d.ts | 3 - .../memory/isSynchronizable.d.ts.map | 1 - .../memory/isSynchronizable.native.d.ts | 3 - .../memory/isSynchronizable.native.d.ts.map | 1 - .../lib/typescript/memory/serializable.d.ts | 7 - .../typescript/memory/serializable.d.ts.map | 1 - .../memory/serializable.native.d.ts | 37 - .../memory/serializable.native.d.ts.map | 1 - .../memory/serializableMappingCache.d.ts | 6 - .../memory/serializableMappingCache.d.ts.map | 1 - .../serializableMappingCache.native.d.ts | 13 - .../serializableMappingCache.native.d.ts.map | 1 - .../lib/typescript/memory/synchronizable.d.ts | 3 - .../typescript/memory/synchronizable.d.ts.map | 1 - .../memory/synchronizable.native.d.ts | 3 - .../memory/synchronizable.native.d.ts.map | 1 - .../memory/synchronizableUnpacker.native.d.ts | 4 - .../synchronizableUnpacker.native.d.ts.map | 1 - .../lib/typescript/memory/types.d.ts | 63 -- .../lib/typescript/memory/types.d.ts.map | 1 - .../memory/valueUnpacker.native.d.ts | 6 - .../memory/valueUnpacker.native.d.ts.map | 1 - .../lib/typescript/mock.d.ts | 2 - .../lib/typescript/mock.d.ts.map | 1 - .../lib/typescript/platformChecker.d.ts | 5 - .../lib/typescript/platformChecker.d.ts.map | 1 - .../typescript/platformChecker.native.d.ts | 2 - .../platformChecker.native.d.ts.map | 1 - .../lib/typescript/runtimes.d.ts | 75 +- .../lib/typescript/runtimes.d.ts.map | 2 +- .../lib/typescript/runtimes.native.d.ts | 59 -- .../lib/typescript/runtimes.native.d.ts.map | 1 - .../specs/NativeWorkletsModule.d.ts | 2 +- .../specs/NativeWorkletsModule.d.ts.map | 2 +- .../lib/typescript/specs/index.d.ts | 2 +- .../lib/typescript/specs/index.d.ts.map | 2 +- .../lib/typescript/threads.d.ts | 138 ++- .../lib/typescript/threads.d.ts.map | 2 +- .../lib/typescript/threads.native.d.ts | 139 --- .../lib/typescript/threads.native.d.ts.map | 1 - .../lib/typescript/types.d.ts | 126 --- .../lib/typescript/types.d.ts.map | 1 - .../lib/typescript/workletFunction.d.ts | 7 +- .../lib/typescript/workletFunction.d.ts.map | 2 +- .../plugin-transform-class-properties/LICENSE | 22 - .../README.md | 19 - .../lib/index.js | 24 - .../lib/index.js.map | 1 - .../package.json | 35 - .../@babel/plugin-transform-classes/LICENSE | 22 - .../@babel/plugin-transform-classes/README.md | 19 - .../plugin-transform-classes/lib/index.js | 76 -- .../plugin-transform-classes/lib/index.js.map | 1 - .../lib/inline-callSuper-helpers.js | 75 -- .../lib/inline-callSuper-helpers.js.map | 1 - .../lib/transformClass.js | 540 ----------- .../lib/transformClass.js.map | 1 - .../plugin-transform-classes/package.json | 39 - .../LICENSE | 22 - .../README.md | 19 - .../lib/index.js | 49 - .../lib/index.js.map | 1 - .../package.json | 34 - .../LICENSE | 22 - .../README.md | 19 - .../lib/index.js | 243 ----- .../lib/index.js.map | 1 - .../package.json | 37 - .../@babel/preset-typescript/LICENSE | 22 - .../@babel/preset-typescript/README.md | 19 - .../@babel/preset-typescript/lib/index.js | 167 ---- .../@babel/preset-typescript/lib/index.js.map | 1 - .../@babel/preset-typescript/package.json | 40 - .../node_modules/semver/classes/range.js | 1 - .../node_modules/semver/classes/semver.js | 24 +- .../semver/internal/identifiers.js | 4 - .../node_modules/semver/package.json | 6 +- .../react-native-worklets/package.json | 80 +- .../react-native-worklets/plugin/index.d.ts | 13 - .../react-native-worklets/plugin/index.js | 323 +++---- .../scripts/validate-react-native-version.js | 2 +- .../scripts/worklets_utils.rb | 2 +- .../WorkletsModule/NativeWorklets.native.ts | 275 ------ .../src/WorkletsModule/NativeWorklets.ts | 254 ++++- .../src/WorkletsModule/workletsModuleProxy.ts | 16 +- .../src/callGuard.native.ts | 33 - .../src/debug/WorkletsError.native.ts | 32 - .../src/debug/WorkletsError.ts | 18 - .../src/debug/checkCppVersion.ts | 35 - .../src/debug/errors.native.ts | 80 -- .../src/debug/jsVersion.ts | 8 - .../react-native-worklets/src/debug/logger.ts | 16 - .../react-native-worklets/src/debug/types.ts | 9 - .../react-native-worklets/src/deprecated.ts | 6 +- .../src/featureFlags/featureFlags.native.ts | 70 -- .../src/featureFlags/featureFlags.ts | 20 - .../src/featureFlags/types.ts | 29 - .../react-native-worklets/src/index.ts | 66 +- .../src/initializers/initializers.native.ts | 238 ----- .../src/initializers/initializers.ts | 21 - .../workletRuntimeEntry.native.ts | 39 - .../src/initializers/workletRuntimeEntry.ts | 5 - .../src/memory/bundleUnpacker.native.ts | 76 -- .../customSerializableUnpacker.native.ts | 29 - .../src/memory/isSynchronizable.native.ts | 15 - .../src/memory/isSynchronizable.ts | 10 - .../src/memory/serializable.native.ts | 897 ------------------ .../src/memory/serializable.ts | 36 - .../memory/serializableMappingCache.native.ts | 31 - .../src/memory/serializableMappingCache.ts | 12 - .../src/memory/synchronizable.native.ts | 17 - .../src/memory/synchronizable.ts | 10 - .../memory/synchronizableUnpacker.native.ts | 67 -- .../react-native-worklets/src/memory/types.ts | 79 -- .../src/memory/valueUnpacker.native.ts | 92 -- .../react-native-worklets/src/mock.ts | 107 --- .../src/platformChecker.native.ts | 3 - .../src/platformChecker.ts | 8 - .../src/privateGlobals.d.ts | 23 +- .../src/runtimes.native.ts | 198 ---- .../react-native-worklets/src/runtimes.ts | 193 +++- .../src/specs/NativeWorkletsModule.ts | 4 +- .../react-native-worklets/src/specs/index.ts | 2 +- .../src/threads.native.ts | 423 --------- .../react-native-worklets/src/threads.ts | 504 ++++++++-- .../react-native-worklets/src/types.ts | 151 --- .../src/workletFunction.ts | 7 +- .../tar/dist/commonjs/unpack.d.ts | 4 + .../tar/dist/commonjs/unpack.d.ts.map | 2 +- .../node_modules/tar/dist/commonjs/unpack.js | 52 +- .../tar/dist/commonjs/unpack.js.map | 2 +- .../node_modules/tar/dist/esm/unpack.d.ts | 4 + .../node_modules/tar/dist/esm/unpack.d.ts.map | 2 +- .../node_modules/tar/dist/esm/unpack.js | 52 +- .../node_modules/tar/dist/esm/unpack.js.map | 2 +- frontend-admin/node_modules/tar/package.json | 31 +- frontend-admin/package-lock.json | 168 +--- frontend-admin/package.json | 5 +- mobile/src/api/api.ts | 2 +- mobile/src/api/client.ts | 2 +- mobile/src/services/pushNotifications.ts | 6 +- 399 files changed, 4173 insertions(+), 10273 deletions(-) rename ansible/{playbook-frontend-backend.yml => playbook-backend.yml} (50%) delete mode 100644 ansible/playbook-nginx.yml rename docker/frontend/custom-rules.conf => ansible/templates/custom-rules.conf.j2 (100%) create mode 100644 frontend-admin/.gitignore delete mode 100644 frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/CustomSerializableUnpacker.cpp delete mode 100644 frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h delete mode 100644 frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.cpp delete mode 100644 frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.h delete mode 100644 frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeBindings.h delete mode 100644 frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeHolder.h delete mode 100644 frontend-admin/node_modules/react-native-worklets/android/fix-prefab.gradle delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/mock.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/mock.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/types.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/module/types.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/LICENSE delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/README.md delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/package.json delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/LICENSE delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/README.md delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/package.json delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/LICENSE delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/README.md delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/package.json delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/LICENSE delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/README.md delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/package.json delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/LICENSE delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/README.md delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js.map delete mode 100644 frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/package.json delete mode 100644 frontend-admin/node_modules/react-native-worklets/plugin/index.d.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/callGuard.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/checkCppVersion.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/errors.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/jsVersion.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/logger.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/debug/types.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/featureFlags/types.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/bundleUnpacker.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/customSerializableUnpacker.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/serializable.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/serializable.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/synchronizableUnpacker.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/types.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/memory/valueUnpacker.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/mock.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/platformChecker.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/platformChecker.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/runtimes.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/threads.native.ts delete mode 100644 frontend-admin/node_modules/react-native-worklets/src/types.ts diff --git a/.github/workflows/frontend-admin-build.yml b/.github/workflows/frontend-admin-build.yml index 935656b8..3ff9412b 100644 --- a/.github/workflows/frontend-admin-build.yml +++ b/.github/workflows/frontend-admin-build.yml @@ -111,6 +111,8 @@ jobs: - name: Build preview APK working-directory: frontend-admin + env: + EAS_BUILD_NO_EXPO_GO_WARNING: true run: eas build --platform android --profile preview --non-interactive - name: Download preview APK @@ -158,6 +160,8 @@ jobs: - name: Build production APK working-directory: frontend-admin + env: + EAS_BUILD_NO_EXPO_GO_WARNING: true run: eas build --platform android --profile production --non-interactive - name: Download production APK diff --git a/ansible/group_vars/all/vars.yml b/ansible/group_vars/all/vars.yml index 749feede..d840b373 100644 --- a/ansible/group_vars/all/vars.yml +++ b/ansible/group_vars/all/vars.yml @@ -1,47 +1,37 @@ -postgres_version: "16" -postgres_databases: - - name: gestion_db - owner: postgres -postgres_password: "VotreMotDePasseSecure123!" - +pg_version: "16" +db_user: admin_gestion_commande_db +db_name: gestion_commande_db +db_password: "hb-FS462(#I~6(4',Nt=3Rd4567890jsezZ" +db_host: "localhost" +db_port: 5432 # Redis Configuration redis_bind: "127.0.0.1" redis_port: 6379 -redis_maxmemory: "512mb" +redis_maxmemory: "1024mb" redis_maxmemory_policy: "allkeys-lru" -redis_password: "UltrasecretMdp123!" +redis_password: "uQ64h5UhFdrm!H|_cCQer" # ============================================ # Configuration Nginx et Applications # ============================================ -nginx_app_name: "nantais-livraison" -nginx_domain: "{{ ansible_default_ipv4.address }}" + directory: "/home/ubuntu" -tunnel_log: "/var/log/tunnel.log" -tunnel_log_error: "/var/log/tunnel-error.log" -# Chemins des applications (bonnes pratiques) -nginx_frontend_path: "/home/ubuntu/frontend" backend_dir: "/home/ubuntu/backend" backend_binary: "/home/ubuntu/backend/main" -docker_dir: "/home/ubuntu/docker" +uploads_dir: "/home/ubuntu/backend/uploads" frontend_port: 5173 -backend_dir_docker: "/home/ubuntu/backend/docker" +domain_name: "uber-stup.club" # Utilisateurs et permissions user_web: "www-data" # Utilisateur pour les applications web user_deploy: "ubuntu" # Utilisateur pour le déploiement user_owner: "root" # Propriétaire des fichiers systemd -docker_user: docker -docker_group: docker -# Backend -backend_port: 8080 +# Backend +backend_local_port: 8080 +backend_port: 443 # Timeouts nginx_proxy_timeout: 60 -# Cache Duration -nginx_cache_static_duration: "1y" -nginx_cache_media_duration: "1y" - # Upload Size nginx_max_body_size: "10M" diff --git a/ansible/inventory/host.ini b/ansible/inventory/host.ini index 696c6d1a..919cad91 100644 --- a/ansible/inventory/host.ini +++ b/ansible/inventory/host.ini @@ -1,21 +1,5 @@ [all] -vm-postgres ansible_host=192.168.1.65 ansible_user=ubuntu ansible_ssh_pass=root -vm-redis ansible_host=192.168.1.62 ansible_user=ubuntu ansible_ssh_pass=root -vm-nginx ansible_host=192.168.1.67 ansible_user=ubuntu ansible_ssh_pass=root -vm-backend ansible_host=192.168.1.72 ansible_user=ubuntu ansible_ssh_pass=root +uber-stup ansible_host=5.252.20.129 ansible_user=root ansible_ssh_pass=rL9lY6YkcDQmfRuZ3Z -[postgres] -vm-postgres ansible_host=192.168.1.65 ansible_user=ubuntu ansible_ssh_pass=root - -[redis] -vm-redis ansible_host=192.168.1.62 ansible_user=ubuntu ansible_ssh_pass=root - -[nginx] -vm-nginx ansible_host=192.168.1.67 ansible_user=ubuntu ansible_ssh_pass=root - -[backend] -vm-backend ansible_host=192.168.1.72 ansible_user=ubuntu ansible_ssh_pass=root - -[services] -vm-redis ansible_host=192.168.1.62 ansible_user=ubuntu ansible_ssh_pass=root -vm-postgres ansible_host=192.168.1.65 ansible_user=ubuntu ansible_ssh_pass=root +[uber-stup] +uber-stup ansible_host=5.252.20.129 ansible_user=root ansible_ssh_pass=rL9lY6YkcDQmfRuZ3Z diff --git a/ansible/playbook-frontend-backend.yml b/ansible/playbook-backend.yml similarity index 50% rename from ansible/playbook-frontend-backend.yml rename to ansible/playbook-backend.yml index d9d7a9c4..44844f6a 100644 --- a/ansible/playbook-frontend-backend.yml +++ b/ansible/playbook-backend.yml @@ -1,6 +1,6 @@ --- - name: Installation et configuration du frontend et backend - hosts: nginx + hosts: all become: true gather_facts: true @@ -19,6 +19,9 @@ - tar - rsync - acl + - nginx + - certbot + - python3-certbot-nginx state: present update_cache: yes @@ -42,23 +45,8 @@ state: present mode: "0644" - - name: Setup Node.js 20 repository + - name: Check Go versions ansible.builtin.shell: | - curl -fsSL https://deb.nodesource.com/setup_20.x | bash - - args: - executable: /bin/bash - - - name: Install Node.js 20 - ansible.builtin.apt: - name: nodejs - state: present - update_cache: yes - dpkg_options: "force-overwrite" - - - name: Check Node.js, npm and Go versions - ansible.builtin.shell: | - echo "Node: $(node -v)" - echo "npm: $(npm -v)" echo "Go: $(go version)" register: versions_check changed_when: false @@ -80,68 +68,25 @@ group: root mode: "0755" - - name: Ensure /home/ubuntu exists with correct permissions + - name: Créer l'utilisateur de déploiement s'il n'existe pas + ansible.builtin.user: + name: "{{ user_deploy }}" + shell: /bin/bash + create_home: yes + state: present + + - name: Ensure /home/{{ user_deploy }} exists with correct permissions ansible.builtin.file: - path: /home/ubuntu + path: "/home/{{ user_deploy }}" state: directory owner: "{{ user_deploy }}" group: "{{ user_deploy }}" mode: "0755" - - name: Remove old frontend directory if exists - ansible.builtin.file: - path: "{{ nginx_frontend_path }}" - state: absent - - - name: Create frontend directory with deploy user ownership - ansible.builtin.file: - path: "{{ nginx_frontend_path }}" - state: directory - owner: "{{ user_deploy }}" - group: "{{ user_deploy }}" - mode: "0755" - - - name: Synchronize frontend content (excluding node_modules and .git) - ansible.builtin.synchronize: - src: ../frontend/ - dest: "{{ nginx_frontend_path }}/" - rsync_opts: - - "--exclude=node_modules" - - "--exclude=.git" - - "--exclude=dist" - - "--exclude=build" - delete: no - recursive: yes - tags: - - syncro - - - name: Install npm dependencies as deploy user - become_user: "{{ user_deploy }}" - ansible.builtin.shell: | - export PATH=/usr/local/go/bin:$PATH - npm install - npm run build - args: - chdir: "{{ nginx_frontend_path }}" - executable: /bin/bash - - - name: Set ownership to www-data for runtime - ansible.builtin.file: - path: "{{ nginx_frontend_path }}" - owner: "{{ user_web }}" - group: "{{ user_web }}" - mode: "0755" - recurse: yes - # ============================================ # BACKEND # ============================================ - - name: Remove old backend directory if exists - ansible.builtin.file: - path: "{{ backend_dir }}" - state: absent - - name: Create backend directory with deploy user ownership ansible.builtin.file: path: "{{ backend_dir }}" @@ -149,15 +94,22 @@ owner: "{{ user_deploy }}" group: "{{ user_deploy }}" mode: "0755" + tags: backend - - name: Copy backend files - ansible.builtin.copy: - src: "../backendprod/gestion/" + - name: Synchroniser le backend Go + ansible.builtin.synchronize: + src: ../backend/gestion/ dest: "{{ backend_dir }}/" - owner: "{{ user_deploy }}" - group: "{{ user_deploy }}" - mode: preserve - directory_mode: "0755" + rsync_opts: + - "--exclude=.git" + - "--exclude=.gitignore" + - "--exclude=docker-compose.yml" + - "--exclude=.env" + - "--no-owner" + - "--no-group" + delete: yes + recursive: yes + tags: backend - name: Compile backend as deploy user become_user: "{{ user_deploy }}" @@ -168,8 +120,8 @@ args: chdir: "{{ backend_dir }}" executable: /bin/bash - tags: - - compile + tags: backend + - name: Set ownership to www-data for runtime ansible.builtin.file: path: "{{ backend_dir }}" @@ -177,6 +129,7 @@ group: "{{ user_web }}" mode: "0755" recurse: yes + tags: backend - name: Set executable permission on backend binary ansible.builtin.file: @@ -184,6 +137,7 @@ owner: "{{ user_web }}" group: "{{ user_web }}" mode: "0755" + tags: backend # ============================================ # SYSTEMD SERVICES @@ -196,39 +150,156 @@ owner: root group: root mode: "0644" + tags: backend - name: Reload systemd daemon ansible.builtin.systemd: daemon_reload: yes - - - name: Enable and restart frontend service - ansible.builtin.systemd: - name: frontend - enabled: yes - state: restarted + tags: backend - name: Enable and restart backend service ansible.builtin.systemd: name: backend enabled: yes state: restarted + tags: backend - name: Wait for backend to be ready ansible.builtin.wait_for: - port: "{{ backend_port }}" + port: "{{ backend_local_port }}" delay: 2 timeout: 30 + tags: backend - name: Display service status ansible.builtin.shell: | - echo "=== Frontend Service ===" - systemctl status frontend --no-pager || true - echo "" echo "=== Backend Service ===" systemctl status backend --no-pager || true register: service_status changed_when: false + tags: backend - name: Show service status ansible.builtin.debug: msg: "{{ service_status.stdout_lines }}" + + - name: Configuration UFW + ansible.builtin.ufw: + rule: allow + port: "{{ item }}" + proto: tcp + loop: + - "{{ backend_port }}" + - 80 + - 22 + + - name: Activation du firewall + ansible.builtin.ufw: + state: enabled + + - name: Vérifier si un certificat existe déjà + ansible.builtin.stat: + path: "/etc/letsencrypt/live/{{ domain_name }}/fullchain.pem" + register: cert_file + tags: [certbot] + + - name: Déployer la configuration Nginx HTTP + ansible.builtin.template: + src: templates/nginx.conf.j2 + dest: /etc/nginx/sites-available/api + vars: + ssl_enabled: false + tags: [certbot] + + - name: Activation du site Nginx + ansible.builtin.file: + src: /etc/nginx/sites-available/api + dest: /etc/nginx/sites-enabled/api + state: link + force: yes + tags: [certbot] + + - name: Suppression du site par défaut + ansible.builtin.file: + path: /etc/nginx/sites-enabled/default + state: absent + tags: [certbot] + + - name: Test de la configuration Nginx + ansible.builtin.command: nginx -t + changed_when: false + tags: [certbot] + + - name: Redémarrage de Nginx + ansible.builtin.systemd: + name: nginx + state: restarted + enabled: yes + tags: [certbot] + + # ============================================================ + # Certificat SSL Let's Encrypt + # ============================================================ + + - name: Générer le certificat SSL avec Certbot + ansible.builtin.command: > + certbot certonly --nginx + -d {{ domain_name }} + --non-interactive + --agree-tos + --email admin@{{ domain_name }} + when: not cert_file.stat.exists + tags: [certbot] + + # ============================================================ + # Nginx - reconfiguration HTTPS après certificat + # ============================================================ + - name: Vérifier la présence du certificat + ansible.builtin.stat: + path: "/etc/letsencrypt/live/{{ domain_name }}/fullchain.pem" + register: cert_file_after + tags: [nginx] + + - name: Déployer la configuration Nginx HTTPS + ansible.builtin.template: + src: templates/nginx.conf.j2 + dest: /etc/nginx/sites-available/api + vars: + ssl_enabled: true + when: cert_file_after.stat.exists + notify: Restart nginx + tags: [nginx] + + - name: Test de la configuration Nginx finale + ansible.builtin.command: nginx -t + changed_when: false + tags: [nginx] + + - name: Redémarrage de Nginx avec SSL + ansible.builtin.systemd: + name: nginx + state: restarted + when: cert_file_after.stat.exists + tags: [nginx] + + - name: Vérifier le renouvellement automatique + ansible.builtin.command: certbot renew --dry-run + register: certbot_renew + changed_when: false + failed_when: false + tags: [certbot] + + - name: Afficher le statut du renouvellement + ansible.builtin.debug: + msg: "{{ certbot_renew.stdout_lines }}" + tags: [certbot] + + handlers: + - name: Reload systemd + ansible.builtin.systemd: + daemon_reload: yes + + - name: Restart nginx + ansible.builtin.systemd: + name: nginx + state: restarted diff --git a/ansible/playbook-nginx.yml b/ansible/playbook-nginx.yml deleted file mode 100644 index e742cf2e..00000000 --- a/ansible/playbook-nginx.yml +++ /dev/null @@ -1,108 +0,0 @@ ---- -- name: Installation et configuration de Nginx - hosts: nginx - become: true - gather_facts: true - - tasks: - - name: Installer Nginx - ansible.builtin.apt: - name: nginx - state: present - update_cache: yes - - - name: Créer le répertoire frontend - ansible.builtin.file: - path: "{{ nginx_frontend_path }}" - state: directory - owner: www-data - group: www-data - mode: "0755" - - - name: Créer le répertoire de logs - ansible.builtin.file: - path: /var/log/nginx - state: directory - owner: www-data - group: adm - mode: "0755" - - - name: Supprimer la config par défaut - ansible.builtin.file: - path: /etc/nginx/sites-enabled/default - state: absent - - - name: Créer la configuration Nginx - ansible.builtin.template: - src: ./templates/nginx.conf.j2 - dest: /etc/nginx/sites-available/{{ nginx_app_name }} - notify: Recharger Nginx - - - name: Activer la configuration - ansible.builtin.file: - src: /etc/nginx/sites-available/{{ nginx_app_name }} - dest: /etc/nginx/sites-enabled/{{ nginx_app_name }} - state: link - notify: Recharger Nginx - - - name: Configurer Nginx global settings - lineinfile: - path: /etc/nginx/nginx.conf - regexp: "{{ item.regexp }}" - line: "{{ item.line }}" - insertafter: "http {" - loop: - - { - regexp: '^\s*server_tokens', - line: " server_tokens off;", - } - - { - regexp: '^\s*client_max_body_size', - line: " client_max_body_size {{ nginx_max_body_size }};", - } - notify: Recharger Nginx - - - name: Tester la configuration Nginx - command: nginx -t - register: nginx_test - changed_when: false - - - name: Afficher le résultat du test - debug: - var: nginx_test.stderr_lines - - - name: Démarrer Nginx - ansible.builtin.systemd: - name: nginx - state: started - enabled: yes - - - name: Configurer UFW - Autoriser HTTP - ansible.builtin.ufw: - rule: allow - port: "80" - proto: tcp - when: nginx_enable_firewall | default(true) - - - name: Configurer UFW - Bloquer accès direct au backend - ansible.builtin.ufw: - rule: deny - port: "{{ backend_port }}" - proto: tcp - from_ip: any - when: nginx_enable_firewall | default(true) - - - name: Configurer le tunnel - ansible.builtin.template: - src: tunnel.conf.j2 - dest: /etc/tunnel.conf - owner: root - group: root - mode: 0644 - notify: Recharger Nginx - - handlers: - - name: Recharger Nginx - systemd: - name: nginx - state: reloaded diff --git a/ansible/playbook.yml b/ansible/playbook.yml index 55188398..a2795223 100644 --- a/ansible/playbook.yml +++ b/ansible/playbook.yml @@ -3,101 +3,180 @@ # PostgreSQL Installation (vm-postgres uniquement) # ============================================ - name: Installation et configuration de PostgreSQL - hosts: postgres + hosts: uber-stup become: true gather_facts: true tasks: - - name: Installer les dépendances système - apt: + # ============================================================ + # Dépendances requises + # ============================================================ + - name: Installer les dépendances pour le dépôt APT + ansible.builtin.apt: name: - - wget - gnupg2 - - lsb-release + - curl - ca-certificates - - apt-transport-https - - acl # Nécessaire pour become_user + - lsb-release + - python3-psycopg2 + - acl state: present update_cache: yes + # ============================================================ + # Ajout du dépôt officiel PostgreSQL + # ============================================================ - name: Ajouter la clé GPG du dépôt PostgreSQL - apt_key: + ansible.builtin.apt_key: url: https://www.postgresql.org/media/keys/ACCC4CF8.asc state: present - - name: Ajouter le dépôt PostgreSQL - apt_repository: + - name: Ajouter le dépôt PostgreSQL 16 + ansible.builtin.apt_repository: repo: "deb http://apt.postgresql.org/pub/repos/apt {{ ansible_distribution_release }}-pgdg main" state: present filename: pgdg - - name: Installer PostgreSQL {{ postgres_version }} - apt: + # ============================================================ + # Installation PostgreSQL 16 + # ============================================================ + - name: Installer PostgreSQL 16 + ansible.builtin.apt: name: - - postgresql-{{ postgres_version }} - - postgresql-contrib-{{ postgres_version }} - - python3-psycopg2 + - "postgresql-{{ pg_version }}" + - "postgresql-client-{{ pg_version }}" + - "postgresql-contrib-{{ pg_version }}" state: present update_cache: yes - - name: S'assurer que PostgreSQL est démarré - systemd: + - name: Démarrer et activer PostgreSQL + ansible.builtin.systemd: name: postgresql state: started enabled: yes - - name: Définir le mot de passe du user postgres - postgresql_user: - name: postgres - password: "{{ postgres_password }}" - state: present - become_user: postgres - - - name: Créer les bases de données PostgreSQL - postgresql_db: - name: "{{ item.name }}" - owner: postgres - state: present - loop: "{{ postgres_databases }}" - become_user: postgres - - - name: Configurer pg_hba.conf pour autoriser le backend - blockinfile: - path: "/etc/postgresql/{{ postgres_version }}/main/pg_hba.conf" - block: | - # Connexions locales - local all postgres peer - host all postgres 127.0.0.1/32 scram-sha-256 - # Connexions backend LAN - host all postgres 192.168.1.0/24 scram-sha-256 - marker: "# {mark} ANSIBLE MANAGED BLOCK" - notify: Redémarrer PostgreSQL - tags: - - reload - - - name: Configurer PostgreSQL pour écouter sur toutes les interfaces - lineinfile: - path: "/etc/postgresql/{{ postgres_version }}/main/postgresql.conf" + # ============================================================ + # Configuration PostgreSQL + # ============================================================ + - name: Configurer l'écoute sur localhost + ansible.builtin.lineinfile: + path: "/etc/postgresql/{{ pg_version }}/main/postgresql.conf" regexp: "^#?listen_addresses" - line: "listen_addresses = '*'" + line: "listen_addresses = 'localhost'" + notify: Restart postgresql + + - name: Configurer le port + ansible.builtin.lineinfile: + path: "/etc/postgresql/{{ pg_version }}/main/postgresql.conf" + regexp: "^#?port" + line: "port = {{ db_port }}" + notify: Restart postgresql + + # ============================================================ + # Locale requise + # ============================================================ + - name: Générer la locale fr_FR.UTF-8 + ansible.builtin.command: locale-gen fr_FR.UTF-8 + register: locale_gen + changed_when: "'Generation complete' in locale_gen.stdout" + + - name: Mettre à jour les locales + ansible.builtin.command: update-locale + when: locale_gen.changed + + # ============================================================ + # Création de la base de données et configuration utilisateur + # ============================================================ + - name: Définir le mot de passe de l'utilisateur postgres + become_user: postgres + ansible.builtin.postgresql_user: + name: "{{ db_user }}" + password: "{{ db_password }}" state: present - notify: Redémarrer PostgreSQL - tags: - - reload + + - name: Vérifier si la base de données existe + become_user: postgres + ansible.builtin.command: psql -tAc "SELECT 1 FROM pg_database WHERE datname='{{ db_name }}'" + register: db_exists + changed_when: false + + - name: Créer la base de données avec ICU + become_user: postgres + ansible.builtin.command: > + psql -c "CREATE DATABASE {{ db_name }} + OWNER {{ db_user }} + ENCODING 'UTF8' + LOCALE_PROVIDER icu + ICU_LOCALE 'fr-FR' + TEMPLATE template0" + when: db_exists.stdout != "1" + + - name: Accorder tous les privilèges sur la base + become_user: postgres + ansible.builtin.postgresql_privs: + db: "{{ db_name }}" + role: "{{ db_user }}" + type: database + privs: ALL + state: present + + # ============================================================ + # Authentification pg_hba.conf + # ============================================================ + - name: Configurer l'authentification md5 pour les connexions locales + ansible.builtin.postgresql_pg_hba: + dest: "/etc/postgresql/{{ pg_version }}/main/pg_hba.conf" + contype: host + databases: "{{ db_name }}" + users: "{{ db_user }}" + source: "127.0.0.1/32" + method: md5 + notify: Restart postgresql + + - name: Configurer l'authentification md5 pour IPv6 local + ansible.builtin.postgresql_pg_hba: + dest: "/etc/postgresql/{{ pg_version }}/main/pg_hba.conf" + contype: host + databases: "{{ db_name }}" + users: "{{ db_user }}" + source: "::1/128" + method: md5 + notify: Restart postgresql + + # ============================================================ + # Vérification + # ============================================================ + - name: Vérifier la version de PostgreSQL + become_user: postgres + ansible.builtin.command: psql --version + register: pg_version_check + changed_when: false + + - name: Afficher la version + ansible.builtin.debug: + msg: "{{ pg_version_check.stdout }}" + + - name: Vérifier que la base existe + become_user: postgres + ansible.builtin.command: psql -lqt + register: pg_databases + changed_when: false + + - name: Afficher les bases de données + ansible.builtin.debug: + msg: "{{ pg_databases.stdout_lines }}" handlers: - - name: Redémarrer PostgreSQL - systemd: + - name: Restart postgresql + ansible.builtin.systemd: name: postgresql state: restarted - tags: - - reload # ============================================ # Redis Installation (vm-redis uniquement) # ============================================ - name: Installation et configuration de Redis - hosts: redis + hosts: uber-stup become: true gather_facts: true diff --git a/ansible/templates/backend.service.j2 b/ansible/templates/backend.service.j2 index 9fd3be64..252932d0 100644 --- a/ansible/templates/backend.service.j2 +++ b/ansible/templates/backend.service.j2 @@ -5,6 +5,22 @@ After=network.target [Service] User={{ user_owner }} WorkingDirectory={{ backend_dir }} +Environment="PATH=/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +Environment="USER_JWT_SECRET=TheAmaziNgSecretJwtMotherFuckerInThEbitCh3232131231313443jqfdksdjfjsldfjlds" +Environment="DB_HOST=localhost" +Environment="DB_PORT=5432" +Environment="DB_USER=admin_gestion_commande_db" +Environment="DB_PASSWORD=hb-FS462(#I~6(4',Nt=3Rd4567890jsezZ" +Environment="DB_NAME=gestion_commande_db" +Environment="DB_SSLMODE=disable" +Environment="REDIS_HOST=127.0.0.1" +Environment="REDIS_PORT=6379" +Environment="REDIS_PASSWORD=uQ64h5UhFdrm!H|_cCQer" +Environment="SESSION_SECRET=jfWR21Ywbuy{Yq<1A26TV)jCe" +Environment="GIN_MODE=release" +Environment="TOMTOM_API_KEY=MERY8I7LMeYVSLKO5WuV73W9rKJpBLoB" +Environment="API_PORT={{ backend_local_port }}" +Environment="ADMIN_JWT_SECRET=TheAmaziNgSecretJwtMotherFuckerInThEbitCh3232131231313443jqfdksdjfjsldfjlzZ" ExecStart={{ backend_binary }} Restart=always diff --git a/docker/frontend/custom-rules.conf b/ansible/templates/custom-rules.conf.j2 similarity index 100% rename from docker/frontend/custom-rules.conf rename to ansible/templates/custom-rules.conf.j2 diff --git a/ansible/templates/nginx.conf.j2 b/ansible/templates/nginx.conf.j2 index 3c76ebfa..7570e2de 100644 --- a/ansible/templates/nginx.conf.j2 +++ b/ansible/templates/nginx.conf.j2 @@ -1,79 +1,170 @@ -upstream backend { - server 127.0.0.1:{{ backend_port }} max_fails=3 fail_timeout=30s; - keepalive 32; +# ========================================================= +# Request ID for correlation +# ========================================================= +map $http_x_request_id $req_id { + default $http_x_request_id; + "" $request_id; } +# ========================================================= +# Rate limiting +# ========================================================= +limit_req_zone $binary_remote_addr zone=api:10m rate=30r/m; +limit_req_zone $binary_remote_addr zone=uploads:10m rate=10r/m; + +# ========================================================= +# Upstream backend +# ========================================================= +upstream backend { + server 127.0.0.1:{{ backend_local_port }} max_fails=3 fail_timeout=30s; + keepalive 32; + keepalive_requests 100; + keepalive_timeout 60s; +} + +{% if ssl_enabled %} +# ========================================================= +# HTTP → HTTPS redirect +# ========================================================= server { listen 80; listen [::]:80; - server_name {{ nginx_domain }}; - root {{ nginx_frontend_path }}/dist; - index index.html; + server_name {{ domain_name }}; + return 301 https://$host$request_uri; +} +{% endif %} - access_log /var/log/nginx/{{ nginx_app_name }}.access.log; - error_log /var/log/nginx/{{ nginx_app_name }}.error.log; +# ========================================================= +# API Server +# ========================================================= +server { +{% if ssl_enabled %} + listen {{ backend_port }} ssl; + listen [::]:{{ backend_port }} ssl; + ssl_certificate /etc/letsencrypt/live/{{ domain_name }}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/{{ domain_name }}/privkey.pem; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305; + ssl_prefer_server_ciphers off; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 1d; + ssl_session_tickets off; + add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; +{% else %} + listen {{ backend_port }}; + listen [::]:{{ backend_port }}; +{% endif %} + + server_name {{ domain_name }}; client_max_body_size {{ nginx_max_body_size }}; - location /api/ { - limit_except GET POST PUT DELETE PATCH OPTIONS { - deny all; - } + server_tokens off; - proxy_pass http://backend/; + # ========================================================= + # Security headers + # ========================================================= + add_header X-Frame-Options "DENY" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; + proxy_hide_header X-Powered-By; + proxy_hide_header Server; + + # ========================================================= + # API proxy + # ========================================================= + location / { + limit_req zone=api burst=20 nodelay; + + limit_except GET POST PUT PATCH DELETE OPTIONS { deny all; } + + proxy_pass http://backend; proxy_http_version 1.1; - proxy_set_header Connection ""; + proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Request-ID $req_id; + proxy_set_header Connection ""; - proxy_connect_timeout {{ nginx_proxy_timeout }}s; - proxy_send_timeout {{ nginx_proxy_timeout }}s; - proxy_read_timeout {{ nginx_proxy_timeout }}s; - - proxy_buffering on; - proxy_buffer_size 4k; - proxy_buffers 8 4k; - proxy_no_cache 1; - proxy_cache_bypass 1; + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; } - location / { - try_files $uri $uri/ /index.html; - add_header Cache-Control "no-cache, no-store, must-revalidate"; - } + # ========================================================= + # Uploads + # ========================================================= + location /uploads/ { + alias {{ uploads_dir }}/; + limit_req zone=uploads burst=20 nodelay; + limit_except GET HEAD { deny all; } - location ~* \.(css|js)$ { - expires {{ nginx_cache_static_duration }}; + # Bloquer les fichiers exécutables + location ~* \.(php|php5|phtml|sh|py|pl|cgi|exe|asp|aspx|jsp)$ { + deny all; + } + + expires 30d; add_header Cache-Control "public, immutable"; - access_log off; + add_header X-Content-Type-Options "nosniff" always; } - location ~* \.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ { - expires {{ nginx_cache_media_duration }}; - add_header Cache-Control "public, immutable"; - access_log off; + location ^~ /uploads/images/ { + alias {{ uploads_dir }}/images/; + limit_req zone=uploads burst=20 nodelay; + limit_except GET HEAD OPTIONS { deny all; } + + add_header Access-Control-Allow-Origin "*" always; + add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always; + add_header X-Content-Type-Options "nosniff" always; + + expires 30d; + add_header Cache-Control "public, immutable" always; + + types { + image/jpeg jpg jpeg; + image/png png; + image/gif gif; + image/webp webp; + image/svg+xml svg; + } + default_type image/jpeg; } - location = /health { - access_log off; - return 200 "healthy\n"; - add_header Content-Type text/plain; + location ^~ /uploads/videos/ { + alias {{ uploads_dir }}/videos/; + limit_req zone=uploads burst=20 nodelay; + limit_except GET HEAD OPTIONS { deny all; } + + add_header Access-Control-Allow-Origin "*" always; + add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always; + add_header X-Content-Type-Options "nosniff" always; + + expires 30d; + add_header Cache-Control "public, immutable" always; + + types { + video/mp4 mp4; + video/webm webm; + video/ogg ogv; + } + default_type video/mp4; } - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header Referrer-Policy "strict-origin-when-cross-origin" always; - + # ========================================================= + # Deny hidden files and sensitive files + # ========================================================= location ~ /\. { deny all; access_log off; log_not_found off; } - location ~* (\.env|\.git|package\.json|package-lock\.json|yarn\.lock)$ { + location ~* (\.env|\.git|package\.json|package-lock\.json|yarn\.lock|Dockerfile|docker-compose\.yml)$ { deny all; + access_log off; + log_not_found off; } } diff --git a/backend/gestion/main.go b/backend/gestion/main.go index fcc8eac5..14c1e5cc 100644 --- a/backend/gestion/main.go +++ b/backend/gestion/main.go @@ -89,14 +89,14 @@ func main() { Domain: "", MaxAge: 3600, HttpOnly: true, - Secure: false, - SameSite: http.SameSiteLaxMode, + Secure: true, + SameSite: http.SameSiteStrictMode, }) r.Use(sessions.Sessions("mysession", store)) // Configuration CORS r.Use(cors.New(cors.Config{ - AllowOrigins: []string{"http://172.20.167.237", "http://localhost:5173", "http://localhost:8080", "http://192.168.1.72"}, + AllowOrigins: []string{"https://uber-stup.club"}, AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"}, ExposeHeaders: []string{"Content-Length"}, diff --git a/frontend-admin/.gitignore b/frontend-admin/.gitignore new file mode 100644 index 00000000..cac38cad --- /dev/null +++ b/frontend-admin/.gitignore @@ -0,0 +1,5 @@ +node_modules +.expo +dist +build +*.log diff --git a/frontend-admin/node_modules/.bin/fingerprint b/frontend-admin/node_modules/.bin/fingerprint index f30360da..56eccd03 120000 --- a/frontend-admin/node_modules/.bin/fingerprint +++ b/frontend-admin/node_modules/.bin/fingerprint @@ -1 +1 @@ -../@expo/fingerprint/bin/cli.js \ No newline at end of file +../expo/bin/fingerprint \ No newline at end of file diff --git a/frontend-admin/node_modules/.package-lock.json b/frontend-admin/node_modules/.package-lock.json index 476b1eed..5d9c3cd7 100644 --- a/frontend-admin/node_modules/.package-lock.json +++ b/frontend-admin/node_modules/.package-lock.json @@ -1245,7 +1245,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1778,9 +1777,9 @@ } }, "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": { "semver": "bin/semver.js" }, @@ -3859,12 +3858,12 @@ "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==" }, "node_modules/expo": { - "version": "54.0.32", - "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.32.tgz", - "integrity": "sha512-yL9eTxiQ/QKKggVDAWO5CLjUl6IS0lPYgEvC3QM4q4fxd6rs7ks3DnbXSGVU3KNFoY/7cRNYihvd0LKYP+MCXA==", + "version": "54.0.33", + "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.33.tgz", + "integrity": "sha512-3yOEfAKqo+gqHcV8vKcnq0uA5zxlohnhA3fu4G43likN8ct5ZZ3LjAh9wDdKteEkoad3tFPvwxmXW711S5OHUw==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.22", + "@expo/cli": "54.0.23", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", @@ -4042,9 +4041,9 @@ } }, "node_modules/expo/node_modules/@expo/cli": { - "version": "54.0.22", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.22.tgz", - "integrity": "sha512-BTH2FCczhJLfj1cpfcKrzhKnvRLTOztgW4bVloKDqH+G3ZSohWLRFNAIz56XtdjPxBbi2/qWhGBAkl7kBon/Jw==", + "version": "54.0.23", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.23.tgz", + "integrity": "sha512-km0h72SFfQCmVycH/JtPFTVy69w6Lx1cHNDmfLfQqgKFYeeHTjx7LVDP4POHCtNxFP2UeRazrygJhlh4zz498g==", "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@expo/code-signing-certificates": "^0.0.6", @@ -4153,9 +4152,9 @@ } }, "node_modules/expo/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": { "semver": "bin/semver.js" }, @@ -5901,9 +5900,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": { "semver": "bin/semver.js" }, @@ -6693,120 +6692,32 @@ } }, "node_modules/react-native-worklets": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.7.2.tgz", - "integrity": "sha512-DuLu1kMV/Uyl9pQHp3hehAlThoLw7Yk2FwRTpzASOmI+cd4845FWn3m2bk9MnjUw8FBRIyhwLqYm2AJaXDXsog==", - "peer": true, + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", + "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", "dependencies": { - "@babel/plugin-transform-arrow-functions": "7.27.1", - "@babel/plugin-transform-class-properties": "7.27.1", - "@babel/plugin-transform-classes": "7.28.4", - "@babel/plugin-transform-nullish-coalescing-operator": "7.27.1", - "@babel/plugin-transform-optional-chaining": "7.27.1", - "@babel/plugin-transform-shorthand-properties": "7.27.1", - "@babel/plugin-transform-template-literals": "7.27.1", - "@babel/plugin-transform-unicode-regex": "7.27.1", - "@babel/preset-typescript": "7.27.1", - "convert-source-map": "2.0.0", - "semver": "7.7.3" + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-class-properties": "^7.0.0-0", + "@babel/plugin-transform-classes": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/plugin-transform-unicode-regex": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "semver": "7.7.2" }, "peerDependencies": { - "@babel/core": "*", + "@babel/core": "^7.0.0-0", "react": "*", "react-native": "*" } }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/react-native-worklets/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "peer": true, + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "bin": { "semver": "bin/semver.js" }, @@ -7573,9 +7484,9 @@ } }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", diff --git a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/README.md b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/README.md index e9522153..e9d1bc5e 100644 --- a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/README.md +++ b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/README.md @@ -110,8 +110,9 @@ Options: -l --loose Interpret versions and ranges loosely --n <0|1> - This is the base to be used for the prerelease identifier. +-n <0|1|false> + Base number for prerelease identifier (default: 0). + Use false to omit the number altogether. -p --include-prerelease Always include prerelease versions in range matching diff --git a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/bin/semver.js b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/bin/semver.js index dbb1bf53..d62bfc0e 100755 --- a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/bin/semver.js +++ b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/bin/semver.js @@ -105,7 +105,7 @@ const main = () => { versions = versions.map((v) => { return coerce ? (semver.coerce(v, options) || { version: v }).version : v }).filter((v) => { - return semver.valid(v) + return semver.valid(v, options) }) if (!versions.length) { return fail() diff --git a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/functions/diff.js b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/functions/diff.js index 04e064e9..c99ab51c 100644 --- a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/functions/diff.js +++ b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/functions/diff.js @@ -53,7 +53,7 @@ const diff = (version1, version2) => { return prefix + 'patch' } - // high and low are preleases + // high and low are prereleases return 'prerelease' } diff --git a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/internal/re.js b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/internal/re.js index 4758c58d..639fca89 100644 --- a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/internal/re.js +++ b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/internal/re.js @@ -78,8 +78,8 @@ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + // ## Pre-release Version Identifier // A numeric identifier, or a non-numeric identifier. -// Non-numberic identifiers include numberic identifiers but can be longer. -// Therefore non-numberic identifiers must go first. +// Non-numeric identifiers include numeric identifiers but can be longer. +// Therefore non-numeric identifiers must go first. createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER] }|${src[t.NUMERICIDENTIFIER]})`) diff --git a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/package.json b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/package.json index 2b8cadaa..a84de916 100644 --- a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/package.json +++ b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/package.json @@ -1,6 +1,6 @@ { "name": "semver", - "version": "7.7.3", + "version": "7.7.4", "description": "The semantic version parser used by npm.", "main": "index.js", "scripts": { @@ -14,8 +14,8 @@ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"" }, "devDependencies": { - "@npmcli/eslint-config": "^5.0.0", - "@npmcli/template-oss": "4.25.1", + "@npmcli/eslint-config": "^6.0.0", + "@npmcli/template-oss": "4.29.0", "benchmark": "^2.1.4", "tap": "^16.0.0" }, @@ -52,7 +52,7 @@ "author": "GitHub Inc.", "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.25.1", + "version": "4.29.0", "engines": ">=10", "distPaths": [ "classes/", diff --git a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/ranges/subset.js b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/ranges/subset.js index 2c49aef1..99f43218 100644 --- a/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/ranges/subset.js +++ b/frontend-admin/node_modules/@expo/prebuild-config/node_modules/semver/ranges/subset.js @@ -38,7 +38,7 @@ const compare = require('../functions/compare.js') // - If LT // - If LT.semver is greater than any < or <= comp in C, return false // - If LT is <=, and LT.semver does not satisfy every C, return false -// - If GT.semver has a prerelease, and not in prerelease mode +// - If LT.semver has a prerelease, and not in prerelease mode // - If no C has a prerelease and the LT.semver tuple, return false // - Else return true diff --git a/frontend-admin/node_modules/expo/android/build.gradle b/frontend-admin/node_modules/expo/android/build.gradle index fbd0663f..e294b593 100644 --- a/frontend-admin/node_modules/expo/android/build.gradle +++ b/frontend-admin/node_modules/expo/android/build.gradle @@ -32,7 +32,7 @@ buildscript { def reactNativeVersion = project.extensions.getByType(ExpoModuleExtension).reactNativeVersion group = 'host.exp.exponent' -version = '54.0.32' +version = '54.0.33' expoModule { // We can't prebuild the module because it depends on the generated files. @@ -43,7 +43,7 @@ android { namespace "expo.core" defaultConfig { versionCode 1 - versionName "54.0.32" + versionName "54.0.33" consumerProguardFiles("proguard-rules.pro") } testOptions { diff --git a/frontend-admin/node_modules/expo/bundledNativeModules.json b/frontend-admin/node_modules/expo/bundledNativeModules.json index 27badb09..09ddcd15 100644 --- a/frontend-admin/node_modules/expo/bundledNativeModules.json +++ b/frontend-admin/node_modules/expo/bundledNativeModules.json @@ -42,7 +42,7 @@ "expo-document-picker": "~14.0.8", "expo-file-system": "~19.0.21", "expo-font": "~14.0.11", - "expo-gl": "~16.0.9", + "expo-gl": "~16.0.10", "expo-glass-effect": "~0.1.8", "expo-google-app-auth": "~8.3.0", "expo-haptics": "~15.0.8", @@ -71,7 +71,7 @@ "expo-notifications": "~0.32.16", "expo-print": "~15.0.8", "expo-live-photo": "~1.0.8", - "expo-router": "~6.0.22", + "expo-router": "~6.0.23", "expo-screen-capture": "~8.0.9", "expo-screen-orientation": "~9.0.8", "expo-secure-store": "~15.0.8", @@ -92,7 +92,7 @@ "expo-video-thumbnails": "~10.0.8", "expo-video": "~3.0.15", "expo-web-browser": "~15.0.10", - "jest-expo": "~54.0.16", + "jest-expo": "~54.0.17", "lottie-react-native": "~7.3.1", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/bin/cli b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/bin/cli index cf5b44c0..ff2b5996 100755 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/bin/cli +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/bin/cli @@ -123,7 +123,7 @@ const args = (0, _arg().default)({ }); if (args['--version']) { // Version is added in the build script. - console.log("54.0.22"); + console.log("54.0.23"); process.exit(0); } if (args['--non-interactive']) { diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js index f9a74663..e246699d 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js @@ -15,19 +15,11 @@ function _ws() { }; return data; } -const _net = require("../../../utils/net"); -function createDevToolsPluginWebsocketEndpoint({ serverBaseUrl }) { +function createDevToolsPluginWebsocketEndpoint() { const wss = new (_ws()).WebSocketServer({ noServer: true }); wss.on('connection', (ws, request)=>{ - // Explicitly limit devtools websocket to loopback requests - if (!(0, _net.isLocalSocket)(request.socket) || !(0, _net.isMatchingOrigin)(request, serverBaseUrl)) { - // NOTE: `socket.close` nicely closes the websocket, which will still allow incoming messages - // `socket.terminate` instead forcefully closes down the socket - ws.terminate(); - return; - } ws.on('message', (message, isBinary)=>{ // Broadcast the received message to all other connected clients wss.clients.forEach((client)=>{ diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map index 0f4875a1..9c7189f5 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../../src/start/server/metro/DevToolsPluginWebsocketEndpoint.ts"],"sourcesContent":["import { WebSocket, WebSocketServer } from 'ws';\n\nimport { isLocalSocket, isMatchingOrigin } from '../../../utils/net';\n\ninterface DevToolsPluginWebsocketEndpointParams {\n serverBaseUrl: string;\n}\n\nexport function createDevToolsPluginWebsocketEndpoint({\n serverBaseUrl,\n}: DevToolsPluginWebsocketEndpointParams): Record {\n const wss = new WebSocketServer({ noServer: true });\n\n wss.on('connection', (ws, request) => {\n // Explicitly limit devtools websocket to loopback requests\n if (!isLocalSocket(request.socket) || !isMatchingOrigin(request, serverBaseUrl)) {\n // NOTE: `socket.close` nicely closes the websocket, which will still allow incoming messages\n // `socket.terminate` instead forcefully closes down the socket\n ws.terminate();\n return;\n }\n\n ws.on('message', (message, isBinary) => {\n // Broadcast the received message to all other connected clients\n wss.clients.forEach((client) => {\n if (client !== ws && client.readyState === WebSocket.OPEN) {\n client.send(message, { binary: isBinary });\n }\n });\n });\n });\n\n return { '/expo-dev-plugins/broadcast': wss };\n}\n"],"names":["createDevToolsPluginWebsocketEndpoint","serverBaseUrl","wss","WebSocketServer","noServer","on","ws","request","isLocalSocket","socket","isMatchingOrigin","terminate","message","isBinary","clients","forEach","client","readyState","WebSocket","OPEN","send","binary"],"mappings":";;;;+BAQgBA;;;eAAAA;;;;yBAR2B;;;;;;qBAEK;AAMzC,SAASA,sCAAsC,EACpDC,aAAa,EACyB;IACtC,MAAMC,MAAM,IAAIC,CAAAA,KAAc,iBAAC,CAAC;QAAEC,UAAU;IAAK;IAEjDF,IAAIG,EAAE,CAAC,cAAc,CAACC,IAAIC;QACxB,2DAA2D;QAC3D,IAAI,CAACC,IAAAA,kBAAa,EAACD,QAAQE,MAAM,KAAK,CAACC,IAAAA,qBAAgB,EAACH,SAASN,gBAAgB;YAC/E,6FAA6F;YAC7F,+DAA+D;YAC/DK,GAAGK,SAAS;YACZ;QACF;QAEAL,GAAGD,EAAE,CAAC,WAAW,CAACO,SAASC;YACzB,gEAAgE;YAChEX,IAAIY,OAAO,CAACC,OAAO,CAAC,CAACC;gBACnB,IAAIA,WAAWV,MAAMU,OAAOC,UAAU,KAAKC,eAAS,CAACC,IAAI,EAAE;oBACzDH,OAAOI,IAAI,CAACR,SAAS;wBAAES,QAAQR;oBAAS;gBAC1C;YACF;QACF;IACF;IAEA,OAAO;QAAE,+BAA+BX;IAAI;AAC9C"} \ No newline at end of file +{"version":3,"sources":["../../../../../src/start/server/metro/DevToolsPluginWebsocketEndpoint.ts"],"sourcesContent":["import { WebSocket, WebSocketServer } from 'ws';\n\nexport function createDevToolsPluginWebsocketEndpoint(): Record {\n const wss = new WebSocketServer({ noServer: true });\n\n wss.on('connection', (ws, request) => {\n ws.on('message', (message, isBinary) => {\n // Broadcast the received message to all other connected clients\n wss.clients.forEach((client) => {\n if (client !== ws && client.readyState === WebSocket.OPEN) {\n client.send(message, { binary: isBinary });\n }\n });\n });\n });\n\n return { '/expo-dev-plugins/broadcast': wss };\n}\n"],"names":["createDevToolsPluginWebsocketEndpoint","wss","WebSocketServer","noServer","on","ws","request","message","isBinary","clients","forEach","client","readyState","WebSocket","OPEN","send","binary"],"mappings":";;;;+BAEgBA;;;eAAAA;;;;yBAF2B;;;;;;AAEpC,SAASA;IACd,MAAMC,MAAM,IAAIC,CAAAA,KAAc,iBAAC,CAAC;QAAEC,UAAU;IAAK;IAEjDF,IAAIG,EAAE,CAAC,cAAc,CAACC,IAAIC;QACxBD,GAAGD,EAAE,CAAC,WAAW,CAACG,SAASC;YACzB,gEAAgE;YAChEP,IAAIQ,OAAO,CAACC,OAAO,CAAC,CAACC;gBACnB,IAAIA,WAAWN,MAAMM,OAAOC,UAAU,KAAKC,eAAS,CAACC,IAAI,EAAE;oBACzDH,OAAOI,IAAI,CAACR,SAAS;wBAAES,QAAQR;oBAAS;gBAC1C;YACF;QACF;IACF;IAEA,OAAO;QAAE,+BAA+BP;IAAI;AAC9C"} \ No newline at end of file diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js index 9b41527a..5b783cf3 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js @@ -262,9 +262,7 @@ async function instantiateMetroAsync(metroBundler, options, { isExporting, exp = } return middleware.use(metroMiddleware); }; - const devtoolsWebsocketEndpoints = (0, _DevToolsPluginWebsocketEndpoint.createDevToolsPluginWebsocketEndpoint)({ - serverBaseUrl - }); + const devtoolsWebsocketEndpoints = (0, _DevToolsPluginWebsocketEndpoint.createDevToolsPluginWebsocketEndpoint)(); Object.assign(websocketEndpoints, devtoolsWebsocketEndpoints); } // Attach Expo Atlas if enabled diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js.map b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js.map index b43d0cbf..3b18f1db 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js.map +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/start/server/metro/instantiateMetro.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { type ExpoConfig, getConfig } from '@expo/config';\nimport { getMetroServerRoot } from '@expo/config/paths';\nimport type { Reporter } from '@expo/metro/metro';\nimport type Bundler from '@expo/metro/metro/Bundler';\nimport type { ReadOnlyGraph } from '@expo/metro/metro/DeltaBundler';\nimport type { TransformOptions } from '@expo/metro/metro/DeltaBundler/Worker';\nimport MetroHmrServer, { Client as MetroHmrClient } from '@expo/metro/metro/HmrServer';\nimport RevisionNotFoundError from '@expo/metro/metro/IncrementalBundler/RevisionNotFoundError';\nimport type MetroServer from '@expo/metro/metro/Server';\nimport formatBundlingError from '@expo/metro/metro/lib/formatBundlingError';\nimport { mergeConfig, resolveConfig, type ConfigT } from '@expo/metro/metro-config';\nimport { Terminal } from '@expo/metro/metro-core';\nimport { getDefaultConfig } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport path from 'path';\n\nimport { createDevToolsPluginWebsocketEndpoint } from './DevToolsPluginWebsocketEndpoint';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { attachAtlasAsync } from './debugging/attachAtlas';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { createMetroMiddleware } from './dev-server/createMetroMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { Log } from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { createCorsMiddleware } from '../middleware/CorsMiddleware';\nimport { createJsInspectorMiddleware } from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record | undefined) => void;\n};\n\n// Wrap terminal and polyfill console.log so we can log during bundling without breaking the indicator.\nclass LogRespectingTerminal extends Terminal {\n constructor(stream: import('node:net').Socket | import('node:stream').Writable) {\n super(stream, { ttyPrint: true });\n\n const sendLog = (...msg: any[]) => {\n if (!msg.length) {\n this.log('');\n } else {\n const [format, ...args] = msg;\n this.log(format, ...args);\n }\n // Flush the logs to the terminal immediately so logs at the end of the process are not lost.\n this.flush();\n };\n\n console.log = sendLog;\n console.info = sendLog;\n }\n}\n\n// Share one instance of Terminal for all instances of Metro.\nconst terminal = new LogRespectingTerminal(process.stdout);\n\ninterface LoadMetroConfigOptions {\n maxWorkers?: number;\n port?: number;\n reporter?: Reporter;\n resetCache?: boolean;\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadMetroConfigOptions,\n {\n exp,\n isExporting,\n getMetroBundler,\n }: { exp: ExpoConfig; isExporting: boolean; getMetroBundler: () => Bundler }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n\n const autolinkingModuleResolutionEnabled =\n exp.experiments?.autolinkingModuleResolution ?? env.EXPO_USE_STICKY_RESOLVER;\n\n const serverActionsEnabled =\n exp.experiments?.reactServerFunctions ?? env.EXPO_UNSTABLE_SERVER_FUNCTIONS;\n\n if (serverActionsEnabled) {\n process.env.EXPO_UNSTABLE_SERVER_FUNCTIONS = '1';\n }\n\n // NOTE: Enable all the experimental Metro flags when RSC is enabled.\n if (exp.experiments?.reactServerComponentRoutes || serverActionsEnabled) {\n process.env.EXPO_USE_METRO_REQUIRE = '1';\n }\n\n const isReactCanaryEnabled =\n (exp.experiments?.reactServerComponentRoutes ||\n serverActionsEnabled ||\n exp.experiments?.reactCanary) ??\n false;\n\n const serverRoot = getMetroServerRoot(projectRoot);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n // NOTE: Allow external tools to override the metro config. This is considered internal and unstable\n const configPath = env.EXPO_OVERRIDE_METRO_CONFIG ?? undefined;\n const resolvedConfig = await resolveConfig(configPath, projectRoot);\n const defaultConfig = getDefaultConfig(projectRoot);\n\n let config: ConfigT = resolvedConfig.isEmpty\n ? defaultConfig\n : await mergeConfig(defaultConfig, resolvedConfig.config);\n\n // Set the watchfolders to include the projectRoot, as Metro assumes this\n // Force-override the reporter\n config = {\n ...config,\n\n // See: `overrideConfigWithArguments` https://github.com/facebook/metro/blob/5059e26/packages/metro-config/src/loadConfig.js#L274-L339\n // Compare to `LoadOptions` type (disregard `reporter` as we don't expose this)\n resetCache: !!options.resetCache,\n maxWorkers: options.maxWorkers ?? config.maxWorkers,\n server: {\n ...config.server,\n port: options.port ?? config.server.port,\n },\n\n watchFolders: !config.watchFolders.includes(config.projectRoot)\n ? [config.projectRoot, ...config.watchFolders]\n : config.watchFolders,\n reporter: {\n update(event) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n },\n };\n\n // @ts-expect-error: Set the global require cycle ignore patterns for SSR bundles. This won't work with custom global prefixes, but we don't use those.\n globalThis.__requireCycleIgnorePatterns = config.resolver?.requireCycleIgnorePatterns;\n\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n if (exp.experiments?.reactCompiler) {\n Log.log(chalk.gray`React Compiler enabled`);\n }\n\n if (env.EXPO_UNSTABLE_TREE_SHAKING && !env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n throw new CommandError(\n 'EXPO_UNSTABLE_TREE_SHAKING requires EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH to be enabled.'\n );\n }\n\n if (env.EXPO_UNSTABLE_TREE_SHAKING) {\n Log.warn(`Experimental fast resolver is enabled.`);\n }\n if (env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n Log.warn(`Experimental bundle optimization is enabled.`);\n }\n if (env.EXPO_UNSTABLE_TREE_SHAKING) {\n Log.warn(`Experimental tree shaking is enabled.`);\n }\n if (autolinkingModuleResolutionEnabled) {\n Log.warn(`Experimental Expo Autolinking module resolver is enabled.`);\n }\n\n if (serverActionsEnabled) {\n Log.warn(\n `React Server Functions (beta) are enabled. Route rendering mode: ${exp.experiments?.reactServerComponentRoutes ? 'server' : 'client'}`\n );\n }\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n isAutolinkingResolverEnabled: autolinkingModuleResolutionEnabled,\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n isReactCanaryEnabled,\n isNamedRequiresEnabled: env.EXPO_USE_METRO_REQUIRE,\n isReactServerComponentsEnabled: !!exp.experiments?.reactServerComponentRoutes,\n getMetroBundler,\n });\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: LoadMetroConfigOptions,\n {\n isExporting,\n exp = getConfig(metroBundler.projectRoot, {\n skipSDKVersionRequirement: true,\n }).exp,\n }: { isExporting: boolean; exp?: ExpoConfig }\n): Promise<{\n metro: MetroServer;\n hmrServer: MetroHmrServer | null;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n const {\n config: metroConfig,\n setEventReporter,\n reporter,\n } = await loadMetroConfigAsync(projectRoot, options, {\n exp,\n isExporting,\n getMetroBundler() {\n return metro.getBundler().getBundler();\n },\n });\n\n // Create the core middleware stack for Metro, including websocket listeners\n const { middleware, messagesSocket, eventsSocket, websocketEndpoints } =\n createMetroMiddleware(metroConfig);\n\n // Get local URL to Metro bundler server (typically configured as 127.0.0.1:8081)\n const serverBaseUrl = metroBundler\n .getUrlCreator()\n .constructUrl({ scheme: 'http', hostType: 'localhost' });\n\n if (!isExporting) {\n // Enable correct CORS headers for Expo Router features\n prependMiddleware(middleware, createCorsMiddleware(exp));\n\n // Enable debug middleware for CDP-related debugging\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware({\n projectRoot: metroBundler.projectRoot,\n serverBaseUrl,\n reporter,\n });\n Object.assign(websocketEndpoints, debugWebsocketEndpoints);\n middleware.use(debugMiddleware);\n middleware.use('/_expo/debugger', createJsInspectorMiddleware());\n\n // TODO(cedric): `enhanceMiddleware` is deprecated, but is currently used to unify the middleware stacks\n // See: https://github.com/facebook/metro/commit/22e85fde85ec454792a1b70eba4253747a2587a9\n // See: https://github.com/facebook/metro/commit/d0d554381f119bb80ab09dbd6a1d310b54737e52\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: MetroServer) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n const devtoolsWebsocketEndpoints = createDevToolsPluginWebsocketEndpoint({ serverBaseUrl });\n Object.assign(websocketEndpoints, devtoolsWebsocketEndpoints);\n }\n\n // Attach Expo Atlas if enabled\n await attachAtlasAsync({\n isExporting,\n exp,\n projectRoot,\n middleware,\n metroConfig,\n // NOTE(cedric): reset the Atlas file once, and reuse it for static exports\n resetAtlasFile: isExporting,\n });\n\n const { server, hmrServer, metro } = await runServer(\n metroBundler,\n metroConfig,\n {\n websocketEndpoints,\n watch: !isExporting && isWatchEnabled(),\n },\n {\n mockServer: isExporting,\n }\n );\n\n // Patch transform file to remove inconvenient customTransformOptions which are only used in single well-known files.\n const originalTransformFile = metro\n .getBundler()\n .getBundler()\n .transformFile.bind(metro.getBundler().getBundler());\n\n metro.getBundler().getBundler().transformFile = async function (\n filePath: string,\n transformOptions: TransformOptions,\n fileBuffer?: Buffer\n ) {\n return originalTransformFile(\n filePath,\n pruneCustomTransformOptions(\n filePath,\n // Clone the options so we don't mutate the original.\n {\n ...transformOptions,\n customTransformOptions: {\n __proto__: null,\n ...transformOptions.customTransformOptions,\n },\n }\n ),\n fileBuffer\n );\n };\n\n setEventReporter(eventsSocket.reportMetroEvent);\n\n // This function ensures that modules in source maps are sorted in the same\n // order as in a plain JS bundle.\n metro._getSortedModules = function (this: MetroServer, graph: ReadOnlyGraph) {\n const modules = [...graph.dependencies.values()];\n\n const ctx = {\n platform: graph.transformOptions.platform,\n environment: graph.transformOptions.customTransformOptions?.environment,\n };\n // Assign IDs to modules in a consistent order\n for (const module of modules) {\n // @ts-expect-error\n this._createModuleId(module.path, ctx);\n }\n // Sort by IDs\n return modules.sort(\n // @ts-expect-error\n (a, b) => this._createModuleId(a.path, ctx) - this._createModuleId(b.path, ctx)\n );\n };\n\n if (hmrServer) {\n let hmrJSBundle:\n | typeof import('@expo/metro-config/build/serializer/fork/hmrJSBundle').default\n | typeof import('@expo/metro/metro/DeltaBundler/Serializers/hmrJSBundle').default;\n\n try {\n hmrJSBundle = require('@expo/metro-config/build/serializer/fork/hmrJSBundle').default;\n } catch {\n // TODO: Add fallback for monorepo tests up until the fork is merged.\n Log.warn('Failed to load HMR serializer from @expo/metro-config, using fallback version.');\n hmrJSBundle = require('@expo/metro/metro/DeltaBundler/Serializers/hmrJSBundle');\n }\n\n // Patch HMR Server to send more info to the `_createModuleId` function for deterministic module IDs and add support for serializing HMR updates the same as all other bundles.\n hmrServer._prepareMessage = async function (\n this: MetroHmrServer,\n group,\n options,\n changeEvent\n ) {\n // Fork of https://github.com/facebook/metro/blob/3b3e0aaf725cfa6907bf2c8b5fbc0da352d29efe/packages/metro/src/HmrServer.js#L327-L393\n // with patch for `_createModuleId`.\n const logger = !options.isInitialUpdate ? changeEvent?.logger : null;\n try {\n const revPromise = this._bundler.getRevision(group.revisionId);\n if (!revPromise) {\n return {\n type: 'error',\n body: formatBundlingError(new RevisionNotFoundError(group.revisionId)),\n };\n }\n logger?.point('updateGraph_start');\n const { revision, delta } = await this._bundler.updateGraph(await revPromise, false);\n logger?.point('updateGraph_end');\n this._clientGroups.delete(group.revisionId);\n group.revisionId = revision.id;\n for (const client of group.clients) {\n client.revisionIds = client.revisionIds.filter(\n (revisionId) => revisionId !== group.revisionId\n );\n client.revisionIds.push(revision.id);\n }\n this._clientGroups.set(group.revisionId, group);\n logger?.point('serialize_start');\n // NOTE(EvanBacon): This is the patch\n const moduleIdContext = {\n platform: revision.graph.transformOptions.platform,\n environment: revision.graph.transformOptions.customTransformOptions?.environment,\n };\n const hmrUpdate = hmrJSBundle(delta, revision.graph, {\n clientUrl: group.clientUrl,\n // NOTE(EvanBacon): This is also the patch\n createModuleId: (moduleId: string) => {\n // @ts-expect-error\n return this._createModuleId(moduleId, moduleIdContext);\n },\n includeAsyncPaths: group.graphOptions.lazy,\n projectRoot: this._config.projectRoot,\n serverRoot: this._config.server.unstable_serverRoot ?? this._config.projectRoot,\n });\n logger?.point('serialize_end');\n return {\n type: 'update',\n body: {\n revisionId: revision.id,\n isInitialUpdate: options.isInitialUpdate,\n ...hmrUpdate,\n },\n };\n } catch (error: any) {\n const formattedError = formatBundlingError(error);\n this._config.reporter.update({\n type: 'bundling_error',\n error,\n });\n return {\n type: 'error',\n body: formattedError,\n };\n }\n };\n }\n\n return {\n metro,\n hmrServer,\n server,\n middleware,\n messageSocket: messagesSocket,\n };\n}\n\n// TODO: Fork the entire transform function so we can simply regex the file contents for keywords instead.\nfunction pruneCustomTransformOptions(\n filePath: string,\n transformOptions: TransformOptions\n): TransformOptions {\n // Normalize the filepath for cross platform checking.\n filePath = filePath.split(path.sep).join('/');\n\n if (\n transformOptions.customTransformOptions?.dom &&\n // The only generated file that needs the dom root is `expo/dom/entry.js`\n !filePath.match(/expo\\/dom\\/entry\\.js$/)\n ) {\n // Clear the dom root option if we aren't transforming the magic entry file, this ensures\n // that cached artifacts from other DOM component bundles can be reused.\n transformOptions.customTransformOptions.dom = 'true';\n }\n\n if (\n transformOptions.customTransformOptions?.routerRoot &&\n // The router root is used all over expo-router (`process.env.EXPO_ROUTER_ABS_APP_ROOT`, `process.env.EXPO_ROUTER_APP_ROOT`) so we'll just ignore the entire package.\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n // Set to the default value.\n transformOptions.customTransformOptions.routerRoot = 'app';\n }\n\n if (\n transformOptions.customTransformOptions?.asyncRoutes &&\n // The async routes settings are also used in `expo-router/_ctx.ios.js` (and other platform variants) via `process.env.EXPO_ROUTER_IMPORT_MODE`\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n delete transformOptions.customTransformOptions.asyncRoutes;\n }\n\n if (\n transformOptions.customTransformOptions?.clientBoundaries &&\n // The client boundaries are only used in `expo/virtual/rsc.js` for production RSC exports.\n !filePath.match(/\\/expo\\/virtual\\/rsc\\.js$/)\n ) {\n delete transformOptions.customTransformOptions.clientBoundaries;\n }\n\n return transformOptions;\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["instantiateMetroAsync","isWatchEnabled","loadMetroConfigAsync","LogRespectingTerminal","Terminal","constructor","stream","ttyPrint","sendLog","msg","length","log","format","args","flush","console","info","terminal","process","stdout","projectRoot","options","exp","isExporting","getMetroBundler","config","reportEvent","autolinkingModuleResolutionEnabled","experiments","autolinkingModuleResolution","env","EXPO_USE_STICKY_RESOLVER","serverActionsEnabled","reactServerFunctions","EXPO_UNSTABLE_SERVER_FUNCTIONS","reactServerComponentRoutes","EXPO_USE_METRO_REQUIRE","isReactCanaryEnabled","reactCanary","serverRoot","getMetroServerRoot","terminalReporter","MetroTerminalReporter","configPath","EXPO_OVERRIDE_METRO_CONFIG","undefined","resolvedConfig","resolveConfig","defaultConfig","getDefaultConfig","isEmpty","mergeConfig","resetCache","maxWorkers","server","port","watchFolders","includes","reporter","update","event","globalThis","__requireCycleIgnorePatterns","resolver","requireCycleIgnorePatterns","transformer","publicPath","baseUrl","platformBundlers","getPlatformBundlers","reactCompiler","Log","chalk","gray","EXPO_UNSTABLE_TREE_SHAKING","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","CommandError","warn","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","isAutolinkingResolverEnabled","isFastResolverEnabled","EXPO_USE_FAST_RESOLVER","isNamedRequiresEnabled","isReactServerComponentsEnabled","setEventReporter","logger","metroBundler","getConfig","skipSDKVersionRequirement","metroConfig","metro","getBundler","middleware","messagesSocket","eventsSocket","websocketEndpoints","createMetroMiddleware","serverBaseUrl","getUrlCreator","constructUrl","scheme","hostType","prependMiddleware","createCorsMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","Object","assign","use","createJsInspectorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","devtoolsWebsocketEndpoints","createDevToolsPluginWebsocketEndpoint","attachAtlasAsync","resetAtlasFile","hmrServer","runServer","watch","mockServer","originalTransformFile","transformFile","bind","filePath","transformOptions","fileBuffer","pruneCustomTransformOptions","customTransformOptions","__proto__","reportMetroEvent","_getSortedModules","graph","modules","dependencies","values","ctx","platform","environment","module","_createModuleId","path","sort","a","b","hmrJSBundle","require","default","_prepareMessage","group","changeEvent","isInitialUpdate","revision","revPromise","_bundler","getRevision","revisionId","type","body","formatBundlingError","RevisionNotFoundError","point","delta","updateGraph","_clientGroups","delete","id","client","clients","revisionIds","filter","push","set","moduleIdContext","hmrUpdate","clientUrl","createModuleId","moduleId","includeAsyncPaths","graphOptions","lazy","_config","unstable_serverRoot","error","formattedError","messageSocket","split","sep","join","dom","match","routerRoot","asyncRoutes","clientBoundaries","CI"],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { type ExpoConfig, getConfig } from '@expo/config';\nimport { getMetroServerRoot } from '@expo/config/paths';\nimport type { Reporter } from '@expo/metro/metro';\nimport type Bundler from '@expo/metro/metro/Bundler';\nimport type { ReadOnlyGraph } from '@expo/metro/metro/DeltaBundler';\nimport type { TransformOptions } from '@expo/metro/metro/DeltaBundler/Worker';\nimport MetroHmrServer, { Client as MetroHmrClient } from '@expo/metro/metro/HmrServer';\nimport RevisionNotFoundError from '@expo/metro/metro/IncrementalBundler/RevisionNotFoundError';\nimport type MetroServer from '@expo/metro/metro/Server';\nimport formatBundlingError from '@expo/metro/metro/lib/formatBundlingError';\nimport { mergeConfig, resolveConfig, type ConfigT } from '@expo/metro/metro-config';\nimport { Terminal } from '@expo/metro/metro-core';\nimport { getDefaultConfig } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport path from 'path';\n\nimport { createDevToolsPluginWebsocketEndpoint } from './DevToolsPluginWebsocketEndpoint';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { attachAtlasAsync } from './debugging/attachAtlas';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { createMetroMiddleware } from './dev-server/createMetroMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { Log } from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { createCorsMiddleware } from '../middleware/CorsMiddleware';\nimport { createJsInspectorMiddleware } from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record | undefined) => void;\n};\n\n// Wrap terminal and polyfill console.log so we can log during bundling without breaking the indicator.\nclass LogRespectingTerminal extends Terminal {\n constructor(stream: import('node:net').Socket | import('node:stream').Writable) {\n super(stream, { ttyPrint: true });\n\n const sendLog = (...msg: any[]) => {\n if (!msg.length) {\n this.log('');\n } else {\n const [format, ...args] = msg;\n this.log(format, ...args);\n }\n // Flush the logs to the terminal immediately so logs at the end of the process are not lost.\n this.flush();\n };\n\n console.log = sendLog;\n console.info = sendLog;\n }\n}\n\n// Share one instance of Terminal for all instances of Metro.\nconst terminal = new LogRespectingTerminal(process.stdout);\n\ninterface LoadMetroConfigOptions {\n maxWorkers?: number;\n port?: number;\n reporter?: Reporter;\n resetCache?: boolean;\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadMetroConfigOptions,\n {\n exp,\n isExporting,\n getMetroBundler,\n }: { exp: ExpoConfig; isExporting: boolean; getMetroBundler: () => Bundler }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n\n const autolinkingModuleResolutionEnabled =\n exp.experiments?.autolinkingModuleResolution ?? env.EXPO_USE_STICKY_RESOLVER;\n\n const serverActionsEnabled =\n exp.experiments?.reactServerFunctions ?? env.EXPO_UNSTABLE_SERVER_FUNCTIONS;\n\n if (serverActionsEnabled) {\n process.env.EXPO_UNSTABLE_SERVER_FUNCTIONS = '1';\n }\n\n // NOTE: Enable all the experimental Metro flags when RSC is enabled.\n if (exp.experiments?.reactServerComponentRoutes || serverActionsEnabled) {\n process.env.EXPO_USE_METRO_REQUIRE = '1';\n }\n\n const isReactCanaryEnabled =\n (exp.experiments?.reactServerComponentRoutes ||\n serverActionsEnabled ||\n exp.experiments?.reactCanary) ??\n false;\n\n const serverRoot = getMetroServerRoot(projectRoot);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n // NOTE: Allow external tools to override the metro config. This is considered internal and unstable\n const configPath = env.EXPO_OVERRIDE_METRO_CONFIG ?? undefined;\n const resolvedConfig = await resolveConfig(configPath, projectRoot);\n const defaultConfig = getDefaultConfig(projectRoot);\n\n let config: ConfigT = resolvedConfig.isEmpty\n ? defaultConfig\n : await mergeConfig(defaultConfig, resolvedConfig.config);\n\n // Set the watchfolders to include the projectRoot, as Metro assumes this\n // Force-override the reporter\n config = {\n ...config,\n\n // See: `overrideConfigWithArguments` https://github.com/facebook/metro/blob/5059e26/packages/metro-config/src/loadConfig.js#L274-L339\n // Compare to `LoadOptions` type (disregard `reporter` as we don't expose this)\n resetCache: !!options.resetCache,\n maxWorkers: options.maxWorkers ?? config.maxWorkers,\n server: {\n ...config.server,\n port: options.port ?? config.server.port,\n },\n\n watchFolders: !config.watchFolders.includes(config.projectRoot)\n ? [config.projectRoot, ...config.watchFolders]\n : config.watchFolders,\n reporter: {\n update(event) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n },\n };\n\n // @ts-expect-error: Set the global require cycle ignore patterns for SSR bundles. This won't work with custom global prefixes, but we don't use those.\n globalThis.__requireCycleIgnorePatterns = config.resolver?.requireCycleIgnorePatterns;\n\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n if (exp.experiments?.reactCompiler) {\n Log.log(chalk.gray`React Compiler enabled`);\n }\n\n if (env.EXPO_UNSTABLE_TREE_SHAKING && !env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n throw new CommandError(\n 'EXPO_UNSTABLE_TREE_SHAKING requires EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH to be enabled.'\n );\n }\n\n if (env.EXPO_UNSTABLE_TREE_SHAKING) {\n Log.warn(`Experimental fast resolver is enabled.`);\n }\n if (env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH) {\n Log.warn(`Experimental bundle optimization is enabled.`);\n }\n if (env.EXPO_UNSTABLE_TREE_SHAKING) {\n Log.warn(`Experimental tree shaking is enabled.`);\n }\n if (autolinkingModuleResolutionEnabled) {\n Log.warn(`Experimental Expo Autolinking module resolver is enabled.`);\n }\n\n if (serverActionsEnabled) {\n Log.warn(\n `React Server Functions (beta) are enabled. Route rendering mode: ${exp.experiments?.reactServerComponentRoutes ? 'server' : 'client'}`\n );\n }\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n isAutolinkingResolverEnabled: autolinkingModuleResolutionEnabled,\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n isReactCanaryEnabled,\n isNamedRequiresEnabled: env.EXPO_USE_METRO_REQUIRE,\n isReactServerComponentsEnabled: !!exp.experiments?.reactServerComponentRoutes,\n getMetroBundler,\n });\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: LoadMetroConfigOptions,\n {\n isExporting,\n exp = getConfig(metroBundler.projectRoot, {\n skipSDKVersionRequirement: true,\n }).exp,\n }: { isExporting: boolean; exp?: ExpoConfig }\n): Promise<{\n metro: MetroServer;\n hmrServer: MetroHmrServer | null;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n const {\n config: metroConfig,\n setEventReporter,\n reporter,\n } = await loadMetroConfigAsync(projectRoot, options, {\n exp,\n isExporting,\n getMetroBundler() {\n return metro.getBundler().getBundler();\n },\n });\n\n // Create the core middleware stack for Metro, including websocket listeners\n const { middleware, messagesSocket, eventsSocket, websocketEndpoints } =\n createMetroMiddleware(metroConfig);\n\n // Get local URL to Metro bundler server (typically configured as 127.0.0.1:8081)\n const serverBaseUrl = metroBundler\n .getUrlCreator()\n .constructUrl({ scheme: 'http', hostType: 'localhost' });\n\n if (!isExporting) {\n // Enable correct CORS headers for Expo Router features\n prependMiddleware(middleware, createCorsMiddleware(exp));\n\n // Enable debug middleware for CDP-related debugging\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware({\n projectRoot: metroBundler.projectRoot,\n serverBaseUrl,\n reporter,\n });\n Object.assign(websocketEndpoints, debugWebsocketEndpoints);\n middleware.use(debugMiddleware);\n middleware.use('/_expo/debugger', createJsInspectorMiddleware());\n\n // TODO(cedric): `enhanceMiddleware` is deprecated, but is currently used to unify the middleware stacks\n // See: https://github.com/facebook/metro/commit/22e85fde85ec454792a1b70eba4253747a2587a9\n // See: https://github.com/facebook/metro/commit/d0d554381f119bb80ab09dbd6a1d310b54737e52\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: MetroServer) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n const devtoolsWebsocketEndpoints = createDevToolsPluginWebsocketEndpoint();\n Object.assign(websocketEndpoints, devtoolsWebsocketEndpoints);\n }\n\n // Attach Expo Atlas if enabled\n await attachAtlasAsync({\n isExporting,\n exp,\n projectRoot,\n middleware,\n metroConfig,\n // NOTE(cedric): reset the Atlas file once, and reuse it for static exports\n resetAtlasFile: isExporting,\n });\n\n const { server, hmrServer, metro } = await runServer(\n metroBundler,\n metroConfig,\n {\n websocketEndpoints,\n watch: !isExporting && isWatchEnabled(),\n },\n {\n mockServer: isExporting,\n }\n );\n\n // Patch transform file to remove inconvenient customTransformOptions which are only used in single well-known files.\n const originalTransformFile = metro\n .getBundler()\n .getBundler()\n .transformFile.bind(metro.getBundler().getBundler());\n\n metro.getBundler().getBundler().transformFile = async function (\n filePath: string,\n transformOptions: TransformOptions,\n fileBuffer?: Buffer\n ) {\n return originalTransformFile(\n filePath,\n pruneCustomTransformOptions(\n filePath,\n // Clone the options so we don't mutate the original.\n {\n ...transformOptions,\n customTransformOptions: {\n __proto__: null,\n ...transformOptions.customTransformOptions,\n },\n }\n ),\n fileBuffer\n );\n };\n\n setEventReporter(eventsSocket.reportMetroEvent);\n\n // This function ensures that modules in source maps are sorted in the same\n // order as in a plain JS bundle.\n metro._getSortedModules = function (this: MetroServer, graph: ReadOnlyGraph) {\n const modules = [...graph.dependencies.values()];\n\n const ctx = {\n platform: graph.transformOptions.platform,\n environment: graph.transformOptions.customTransformOptions?.environment,\n };\n // Assign IDs to modules in a consistent order\n for (const module of modules) {\n // @ts-expect-error\n this._createModuleId(module.path, ctx);\n }\n // Sort by IDs\n return modules.sort(\n // @ts-expect-error\n (a, b) => this._createModuleId(a.path, ctx) - this._createModuleId(b.path, ctx)\n );\n };\n\n if (hmrServer) {\n let hmrJSBundle:\n | typeof import('@expo/metro-config/build/serializer/fork/hmrJSBundle').default\n | typeof import('@expo/metro/metro/DeltaBundler/Serializers/hmrJSBundle').default;\n\n try {\n hmrJSBundle = require('@expo/metro-config/build/serializer/fork/hmrJSBundle').default;\n } catch {\n // TODO: Add fallback for monorepo tests up until the fork is merged.\n Log.warn('Failed to load HMR serializer from @expo/metro-config, using fallback version.');\n hmrJSBundle = require('@expo/metro/metro/DeltaBundler/Serializers/hmrJSBundle');\n }\n\n // Patch HMR Server to send more info to the `_createModuleId` function for deterministic module IDs and add support for serializing HMR updates the same as all other bundles.\n hmrServer._prepareMessage = async function (\n this: MetroHmrServer,\n group,\n options,\n changeEvent\n ) {\n // Fork of https://github.com/facebook/metro/blob/3b3e0aaf725cfa6907bf2c8b5fbc0da352d29efe/packages/metro/src/HmrServer.js#L327-L393\n // with patch for `_createModuleId`.\n const logger = !options.isInitialUpdate ? changeEvent?.logger : null;\n try {\n const revPromise = this._bundler.getRevision(group.revisionId);\n if (!revPromise) {\n return {\n type: 'error',\n body: formatBundlingError(new RevisionNotFoundError(group.revisionId)),\n };\n }\n logger?.point('updateGraph_start');\n const { revision, delta } = await this._bundler.updateGraph(await revPromise, false);\n logger?.point('updateGraph_end');\n this._clientGroups.delete(group.revisionId);\n group.revisionId = revision.id;\n for (const client of group.clients) {\n client.revisionIds = client.revisionIds.filter(\n (revisionId) => revisionId !== group.revisionId\n );\n client.revisionIds.push(revision.id);\n }\n this._clientGroups.set(group.revisionId, group);\n logger?.point('serialize_start');\n // NOTE(EvanBacon): This is the patch\n const moduleIdContext = {\n platform: revision.graph.transformOptions.platform,\n environment: revision.graph.transformOptions.customTransformOptions?.environment,\n };\n const hmrUpdate = hmrJSBundle(delta, revision.graph, {\n clientUrl: group.clientUrl,\n // NOTE(EvanBacon): This is also the patch\n createModuleId: (moduleId: string) => {\n // @ts-expect-error\n return this._createModuleId(moduleId, moduleIdContext);\n },\n includeAsyncPaths: group.graphOptions.lazy,\n projectRoot: this._config.projectRoot,\n serverRoot: this._config.server.unstable_serverRoot ?? this._config.projectRoot,\n });\n logger?.point('serialize_end');\n return {\n type: 'update',\n body: {\n revisionId: revision.id,\n isInitialUpdate: options.isInitialUpdate,\n ...hmrUpdate,\n },\n };\n } catch (error: any) {\n const formattedError = formatBundlingError(error);\n this._config.reporter.update({\n type: 'bundling_error',\n error,\n });\n return {\n type: 'error',\n body: formattedError,\n };\n }\n };\n }\n\n return {\n metro,\n hmrServer,\n server,\n middleware,\n messageSocket: messagesSocket,\n };\n}\n\n// TODO: Fork the entire transform function so we can simply regex the file contents for keywords instead.\nfunction pruneCustomTransformOptions(\n filePath: string,\n transformOptions: TransformOptions\n): TransformOptions {\n // Normalize the filepath for cross platform checking.\n filePath = filePath.split(path.sep).join('/');\n\n if (\n transformOptions.customTransformOptions?.dom &&\n // The only generated file that needs the dom root is `expo/dom/entry.js`\n !filePath.match(/expo\\/dom\\/entry\\.js$/)\n ) {\n // Clear the dom root option if we aren't transforming the magic entry file, this ensures\n // that cached artifacts from other DOM component bundles can be reused.\n transformOptions.customTransformOptions.dom = 'true';\n }\n\n if (\n transformOptions.customTransformOptions?.routerRoot &&\n // The router root is used all over expo-router (`process.env.EXPO_ROUTER_ABS_APP_ROOT`, `process.env.EXPO_ROUTER_APP_ROOT`) so we'll just ignore the entire package.\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n // Set to the default value.\n transformOptions.customTransformOptions.routerRoot = 'app';\n }\n\n if (\n transformOptions.customTransformOptions?.asyncRoutes &&\n // The async routes settings are also used in `expo-router/_ctx.ios.js` (and other platform variants) via `process.env.EXPO_ROUTER_IMPORT_MODE`\n !(filePath.match(/\\/expo-router\\/_ctx/) || filePath.match(/\\/expo-router\\/build\\//))\n ) {\n delete transformOptions.customTransformOptions.asyncRoutes;\n }\n\n if (\n transformOptions.customTransformOptions?.clientBoundaries &&\n // The client boundaries are only used in `expo/virtual/rsc.js` for production RSC exports.\n !filePath.match(/\\/expo\\/virtual\\/rsc\\.js$/)\n ) {\n delete transformOptions.customTransformOptions.clientBoundaries;\n }\n\n return transformOptions;\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["instantiateMetroAsync","isWatchEnabled","loadMetroConfigAsync","LogRespectingTerminal","Terminal","constructor","stream","ttyPrint","sendLog","msg","length","log","format","args","flush","console","info","terminal","process","stdout","projectRoot","options","exp","isExporting","getMetroBundler","config","reportEvent","autolinkingModuleResolutionEnabled","experiments","autolinkingModuleResolution","env","EXPO_USE_STICKY_RESOLVER","serverActionsEnabled","reactServerFunctions","EXPO_UNSTABLE_SERVER_FUNCTIONS","reactServerComponentRoutes","EXPO_USE_METRO_REQUIRE","isReactCanaryEnabled","reactCanary","serverRoot","getMetroServerRoot","terminalReporter","MetroTerminalReporter","configPath","EXPO_OVERRIDE_METRO_CONFIG","undefined","resolvedConfig","resolveConfig","defaultConfig","getDefaultConfig","isEmpty","mergeConfig","resetCache","maxWorkers","server","port","watchFolders","includes","reporter","update","event","globalThis","__requireCycleIgnorePatterns","resolver","requireCycleIgnorePatterns","transformer","publicPath","baseUrl","platformBundlers","getPlatformBundlers","reactCompiler","Log","chalk","gray","EXPO_UNSTABLE_TREE_SHAKING","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","CommandError","warn","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","isAutolinkingResolverEnabled","isFastResolverEnabled","EXPO_USE_FAST_RESOLVER","isNamedRequiresEnabled","isReactServerComponentsEnabled","setEventReporter","logger","metroBundler","getConfig","skipSDKVersionRequirement","metroConfig","metro","getBundler","middleware","messagesSocket","eventsSocket","websocketEndpoints","createMetroMiddleware","serverBaseUrl","getUrlCreator","constructUrl","scheme","hostType","prependMiddleware","createCorsMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","Object","assign","use","createJsInspectorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","devtoolsWebsocketEndpoints","createDevToolsPluginWebsocketEndpoint","attachAtlasAsync","resetAtlasFile","hmrServer","runServer","watch","mockServer","originalTransformFile","transformFile","bind","filePath","transformOptions","fileBuffer","pruneCustomTransformOptions","customTransformOptions","__proto__","reportMetroEvent","_getSortedModules","graph","modules","dependencies","values","ctx","platform","environment","module","_createModuleId","path","sort","a","b","hmrJSBundle","require","default","_prepareMessage","group","changeEvent","isInitialUpdate","revision","revPromise","_bundler","getRevision","revisionId","type","body","formatBundlingError","RevisionNotFoundError","point","delta","updateGraph","_clientGroups","delete","id","client","clients","revisionIds","filter","push","set","moduleIdContext","hmrUpdate","clientUrl","createModuleId","moduleId","includeAsyncPaths","graphOptions","lazy","_config","unstable_serverRoot","error","formattedError","messageSocket","split","sep","join","dom","match","routerRoot","asyncRoutes","clientBoundaries","CI"],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/clients/FetchClient.js b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/clients/FetchClient.js index 86156266..3768cfd9 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/clients/FetchClient.js +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/clients/FetchClient.js @@ -33,7 +33,7 @@ class FetchClient { this.headers = { accept: 'application/json', 'content-type': 'application/json', - 'user-agent': `expo-cli/${"54.0.22"}`, + 'user-agent': `expo-cli/${"54.0.23"}`, authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64') }; } diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/utils/context.js b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/utils/context.js index f71d677d..35e90dc5 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/utils/context.js +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/build/src/utils/telemetry/utils/context.js @@ -83,7 +83,7 @@ function createContext() { cpu: summarizeCpuInfo(), app: { name: 'expo/cli', - version: "54.0.22" + version: "54.0.23" }, ci: _ciinfo().isCI ? { name: _ciinfo().name, diff --git a/frontend-admin/node_modules/expo/node_modules/@expo/cli/package.json b/frontend-admin/node_modules/expo/node_modules/@expo/cli/package.json index 50da8f62..e221fe34 100644 --- a/frontend-admin/node_modules/expo/node_modules/@expo/cli/package.json +++ b/frontend-admin/node_modules/expo/node_modules/@expo/cli/package.json @@ -1,6 +1,6 @@ { "name": "@expo/cli", - "version": "54.0.22", + "version": "54.0.23", "description": "The Expo CLI", "main": "build/bin/cli", "bin": { @@ -169,5 +169,5 @@ "tree-kill": "^1.2.2", "tsd": "^0.28.1" }, - "gitHead": "5205083d153ffa0c5e48db969aeaa1f9810453fc" + "gitHead": "cfd65241fb73317b63e6736e7890a784a69940fc" } diff --git a/frontend-admin/node_modules/expo/node_modules/semver/README.md b/frontend-admin/node_modules/expo/node_modules/semver/README.md index e9522153..e9d1bc5e 100644 --- a/frontend-admin/node_modules/expo/node_modules/semver/README.md +++ b/frontend-admin/node_modules/expo/node_modules/semver/README.md @@ -110,8 +110,9 @@ Options: -l --loose Interpret versions and ranges loosely --n <0|1> - This is the base to be used for the prerelease identifier. +-n <0|1|false> + Base number for prerelease identifier (default: 0). + Use false to omit the number altogether. -p --include-prerelease Always include prerelease versions in range matching diff --git a/frontend-admin/node_modules/expo/node_modules/semver/bin/semver.js b/frontend-admin/node_modules/expo/node_modules/semver/bin/semver.js index dbb1bf53..d62bfc0e 100755 --- a/frontend-admin/node_modules/expo/node_modules/semver/bin/semver.js +++ b/frontend-admin/node_modules/expo/node_modules/semver/bin/semver.js @@ -105,7 +105,7 @@ const main = () => { versions = versions.map((v) => { return coerce ? (semver.coerce(v, options) || { version: v }).version : v }).filter((v) => { - return semver.valid(v) + return semver.valid(v, options) }) if (!versions.length) { return fail() diff --git a/frontend-admin/node_modules/expo/node_modules/semver/functions/diff.js b/frontend-admin/node_modules/expo/node_modules/semver/functions/diff.js index 04e064e9..c99ab51c 100644 --- a/frontend-admin/node_modules/expo/node_modules/semver/functions/diff.js +++ b/frontend-admin/node_modules/expo/node_modules/semver/functions/diff.js @@ -53,7 +53,7 @@ const diff = (version1, version2) => { return prefix + 'patch' } - // high and low are preleases + // high and low are prereleases return 'prerelease' } diff --git a/frontend-admin/node_modules/expo/node_modules/semver/internal/re.js b/frontend-admin/node_modules/expo/node_modules/semver/internal/re.js index 4758c58d..639fca89 100644 --- a/frontend-admin/node_modules/expo/node_modules/semver/internal/re.js +++ b/frontend-admin/node_modules/expo/node_modules/semver/internal/re.js @@ -78,8 +78,8 @@ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + // ## Pre-release Version Identifier // A numeric identifier, or a non-numeric identifier. -// Non-numberic identifiers include numberic identifiers but can be longer. -// Therefore non-numberic identifiers must go first. +// Non-numeric identifiers include numeric identifiers but can be longer. +// Therefore non-numeric identifiers must go first. createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER] }|${src[t.NUMERICIDENTIFIER]})`) diff --git a/frontend-admin/node_modules/expo/node_modules/semver/package.json b/frontend-admin/node_modules/expo/node_modules/semver/package.json index 2b8cadaa..a84de916 100644 --- a/frontend-admin/node_modules/expo/node_modules/semver/package.json +++ b/frontend-admin/node_modules/expo/node_modules/semver/package.json @@ -1,6 +1,6 @@ { "name": "semver", - "version": "7.7.3", + "version": "7.7.4", "description": "The semantic version parser used by npm.", "main": "index.js", "scripts": { @@ -14,8 +14,8 @@ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"" }, "devDependencies": { - "@npmcli/eslint-config": "^5.0.0", - "@npmcli/template-oss": "4.25.1", + "@npmcli/eslint-config": "^6.0.0", + "@npmcli/template-oss": "4.29.0", "benchmark": "^2.1.4", "tap": "^16.0.0" }, @@ -52,7 +52,7 @@ "author": "GitHub Inc.", "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.25.1", + "version": "4.29.0", "engines": ">=10", "distPaths": [ "classes/", diff --git a/frontend-admin/node_modules/expo/node_modules/semver/ranges/subset.js b/frontend-admin/node_modules/expo/node_modules/semver/ranges/subset.js index 2c49aef1..99f43218 100644 --- a/frontend-admin/node_modules/expo/node_modules/semver/ranges/subset.js +++ b/frontend-admin/node_modules/expo/node_modules/semver/ranges/subset.js @@ -38,7 +38,7 @@ const compare = require('../functions/compare.js') // - If LT // - If LT.semver is greater than any < or <= comp in C, return false // - If LT is <=, and LT.semver does not satisfy every C, return false -// - If GT.semver has a prerelease, and not in prerelease mode +// - If LT.semver has a prerelease, and not in prerelease mode // - If no C has a prerelease and the LT.semver tuple, return false // - Else return true diff --git a/frontend-admin/node_modules/expo/package.json b/frontend-admin/node_modules/expo/package.json index 7e9ba2bb..75862ed4 100644 --- a/frontend-admin/node_modules/expo/package.json +++ b/frontend-admin/node_modules/expo/package.json @@ -1,6 +1,6 @@ { "name": "expo", - "version": "54.0.32", + "version": "54.0.33", "description": "The Expo SDK", "main": "src/Expo.ts", "module": "src/Expo.ts", @@ -75,7 +75,7 @@ "homepage": "https://github.com/expo/expo/tree/main/packages/expo", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.22", + "@expo/cli": "54.0.23", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", @@ -124,5 +124,5 @@ "optional": true } }, - "gitHead": "5205083d153ffa0c5e48db969aeaa1f9810453fc" + "gitHead": "cfd65241fb73317b63e6736e7890a784a69940fc" } diff --git a/frontend-admin/node_modules/expo/template.tgz b/frontend-admin/node_modules/expo/template.tgz index e2c32154115abfc66826a7245c4a3768d236c9ae..b97150ece202ff56c3e3bf114fd1ef4ce2388b7f 100644 GIT binary patch delta 318669 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

-@gXw$@f?|1bIZuq)fIIr;ipHM+cce@SGa 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

F(n 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%0AD4`3pg6% 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

7Y# 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

xinrNu;YBP(Pl&e?H8ky;9$uA+1jW-tIX%StNy zx76F+UF;=)^bv=7h{6U95_yZuXZTP>U^O-P7Io$@9OE`=6jq=l?h7{2yak=SF9Le6wHn563uPW7$)gHzh0$4RDR0#Xiks ztYy~mY%d0v)-3 zM*c<`&~64m=`ot~C}v7O0?~s2o~2zq0bdcTP>Lf}q6o2Esfv+E!(=f$frT4lV6j4z z-?4CFdkDn=LNOqfQBsITgP{RDhB5*k%#Fp5K`1R?LgXyt!p#E!);Fay) z)5G1g)G`;`hzsCMK^LuqumPnOixm2uV z?H7jqd%L;8vf)aJOe%_ihl}Nr5`{t{lPU(la&e?AS`5bw6)DBhVmTZui-N;{WUy4G zgr#C}80_X2==eAKlGkAsEeVl}l;Q?cQR)BEN<*%#L}>*t_?SQmS~I-)Ze;tO%z6hfutB1 z)d7?R4q**R!K_lb(5^6!5lJ+EoQxqbqXTdRMsO6O;S#evVAvnyAci{33PG7?PsK#b zH_`B;CE^&)eI2m`b%V)@+07Ak&-To$7cg+z!O@?g=8y7s1Y2a}1=byWU>`XT!Z z>ICBWjJRYP1V0kN2vL1CudW_P5&<5-3#J(gBebkvRMp#^jRFA1b2k_e^Fw0szfsnvkUBq4RS+ivUJQ^dkI8Y*VQhj|2MySaY1*u^qgu%#|2od#% zMw*cW8cTnsFgQu@MFs<3VZaeur{G3WPYqI8$pE#LTA;5|9JZPHtql36#N&a8H7+HI7xs2UK*e|K$rqFX{1n7%=hQi12%aZnsb9D zXRJy@&?K!X&;-64&OQDnWnx`NJ(DI&d_(PDO(7}l-JsRZp?+0g#v{DI{=IyJjo$z0 z>+REI|Nn^n<478RpxkimFP;F|4GjbIbsGFR{U{NOPV zfWi>`r8WdFz<-3kjqTsZyD9#^0rB6+Xw3J&?2$f{G^9~~m{!NYE}^clr@MzYi*mqb zln|B~00Aqwcn%LYWeu2cSvUei0YL*bY$Vix;?Ddc1A=l#f39W#Y)K{erin|wY1rb!Kxf>7pUCN;*M z{u7OimFO&^#Aqu5?#u}DL<(4<;K3mxg+wvH#3n|6q8uuVQo=DJxm+YwO2i6SCWk|1 z(lCjVLvdu`ut*vU50gm42EYJgbbx|Es)1r>K~gZr3Kgi$5>xi(?8WAmkwPZ5jz;Y|t3nA1dMmVO&Oow>7@$C4HEE4385j6PAR}*Zaqy;o#`9%N? z!-fujOb-YFl883&Yh1lbM^acin`?#FIl8BFlC#$E_pnluhUYS3NW%*_gpdqF>YvLb zkt1o$$8v#U%Bm$B!V$gQ+#1+|vd-u*x`FXn_hn%ZyKo4ZpFog^F?>8t;FUB`GtyV$ z%D3VOU~cD-2yimRWVSS$K&#^PkHt;uu_$wYjfO;x4Qo(@g*;&dmKt$<5I7`CU}MdG+%Bx7`Zw(bVb&CtY?a;LG6>GddmK+F2b{`$S$CN z1_QWSr3MWFRmYaa`az$Xn>?%B|^>jfhlPBq^_7HVY*DECB#6ck%C=;?w(jF*gn*Ll~fb z3O|2Ay=ghJAR7(d47}`R@gEZm{dxd@&TVqZx!h1#WH7*C7<<%8gV`Krf3sd#V>wMY@c%vhm%Hou-@$){o*s?t-^;TJ|M?f} z-=AA%v+>v8@)-~c5KI8C?y4)4)Ef|nABLn!*&Q%nN}BTRLlDYx@y7*EtLrC2KX!+x z1gT6&157yh`S^kbzTqM$JGMrneAe}wWz2Q6c=otVSAS0*RU=sGDI;p~eN9i()Aal| OKK}y}Y)7F0Vg~@~EF19v delta 318669 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�O; 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 - This is the base to be used for the prerelease identifier. +-n <0|1|false> + Base number for prerelease identifier (default: 0). + Use false to omit the number altogether. -p --include-prerelease Always include prerelease versions in range matching diff --git a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/bin/semver.js b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/bin/semver.js index dbb1bf53..d62bfc0e 100755 --- a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/bin/semver.js +++ b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/bin/semver.js @@ -105,7 +105,7 @@ const main = () => { versions = versions.map((v) => { return coerce ? (semver.coerce(v, options) || { version: v }).version : v }).filter((v) => { - return semver.valid(v) + return semver.valid(v, options) }) if (!versions.length) { return fail() diff --git a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/functions/diff.js b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/functions/diff.js index 04e064e9..c99ab51c 100644 --- a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/functions/diff.js +++ b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/functions/diff.js @@ -53,7 +53,7 @@ const diff = (version1, version2) => { return prefix + 'patch' } - // high and low are preleases + // high and low are prereleases return 'prerelease' } diff --git a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/internal/re.js b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/internal/re.js index 4758c58d..639fca89 100644 --- a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/internal/re.js +++ b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/internal/re.js @@ -78,8 +78,8 @@ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + // ## Pre-release Version Identifier // A numeric identifier, or a non-numeric identifier. -// Non-numberic identifiers include numberic identifiers but can be longer. -// Therefore non-numberic identifiers must go first. +// Non-numeric identifiers include numeric identifiers but can be longer. +// Therefore non-numeric identifiers must go first. createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER] }|${src[t.NUMERICIDENTIFIER]})`) diff --git a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/package.json b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/package.json index 2b8cadaa..a84de916 100644 --- a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/package.json +++ b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/package.json @@ -1,6 +1,6 @@ { "name": "semver", - "version": "7.7.3", + "version": "7.7.4", "description": "The semantic version parser used by npm.", "main": "index.js", "scripts": { @@ -14,8 +14,8 @@ "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"" }, "devDependencies": { - "@npmcli/eslint-config": "^5.0.0", - "@npmcli/template-oss": "4.25.1", + "@npmcli/eslint-config": "^6.0.0", + "@npmcli/template-oss": "4.29.0", "benchmark": "^2.1.4", "tap": "^16.0.0" }, @@ -52,7 +52,7 @@ "author": "GitHub Inc.", "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.25.1", + "version": "4.29.0", "engines": ">=10", "distPaths": [ "classes/", diff --git a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/ranges/subset.js b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/ranges/subset.js index 2c49aef1..99f43218 100644 --- a/frontend-admin/node_modules/npm-package-arg/node_modules/semver/ranges/subset.js +++ b/frontend-admin/node_modules/npm-package-arg/node_modules/semver/ranges/subset.js @@ -38,7 +38,7 @@ const compare = require('../functions/compare.js') // - If LT // - If LT.semver is greater than any < or <= comp in C, return false // - If LT is <=, and LT.semver does not satisfy every C, return false -// - If GT.semver has a prerelease, and not in prerelease mode +// - If LT.semver has a prerelease, and not in prerelease mode // - If no C has a prerelease and the LT.semver tuple, return false // - Else return true diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.cpp index 2784e445..17da8002 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include @@ -12,22 +11,26 @@ namespace worklets { -void AnimationFrameBatchinator::addToBatch(jsi::Function &&callback) { +void AnimationFrameBatchinator::addToBatch( + const facebook::jsi::Value &callback) { { std::lock_guard lock(callbacksMutex_); - callbacks_.push_back(std::make_shared(std::move(callback))); + callbacks_.push_back( + std::make_shared(*uiRuntime_, callback)); } flush(); } -AnimationFrameBatchinator::JsiRequestAnimationFrame AnimationFrameBatchinator::getJsiRequestAnimationFrame() { - return [weakThis = weak_from_this()](facebook::jsi::Runtime &rt, const facebook::jsi::Value &callback) { +AnimationFrameBatchinator::JsiRequestAnimationFrame +AnimationFrameBatchinator::getJsiRequestAnimationFrame() { + return [weakThis = weak_from_this()]( + facebook::jsi::Runtime &rt, const facebook::jsi::Value &callback) { const auto strongThis = weakThis.lock(); if (!strongThis) { return; } - strongThis->addToBatch(callback.asObject(rt).asFunction(rt)); + strongThis->addToBatch(callback); }; } @@ -45,21 +48,24 @@ void AnimationFrameBatchinator::flush() { auto callbacks = strongThis->pullCallbacks(); strongThis->flushRequested_ = false; - auto &uiWorkletRuntime = strongThis->uiWorkletRuntime_; + auto &uiRuntime = *(strongThis->uiRuntime_); for (const auto &callback : callbacks) { - uiWorkletRuntime->runSync(*callback, timestampMs); + runOnRuntimeGuarded(uiRuntime, *callback, timestampMs); } }); } -std::vector> AnimationFrameBatchinator::pullCallbacks() { +std::vector> +AnimationFrameBatchinator::pullCallbacks() { std::lock_guard lock(callbacksMutex_); return std::move(callbacks_); } AnimationFrameBatchinator::AnimationFrameBatchinator( - const std::shared_ptr &uiWorkletRuntime, - RuntimeBindings::RequestAnimationFrame requestAnimationFrame) - : uiWorkletRuntime_(uiWorkletRuntime), requestAnimationFrame_(std::move(requestAnimationFrame)) {} + facebook::jsi::Runtime &uiRuntime, + std::function)> + &&forwardedRequestAnimationFrame) + : uiRuntime_(&uiRuntime), + requestAnimationFrame_(std::move(forwardedRequestAnimationFrame)) {} } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.h index edb2249e..c6455b0c 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/AnimationFrameQueue/AnimationFrameBatchinator.h @@ -2,9 +2,6 @@ #include #include -#include -#include - #include #include #include @@ -13,25 +10,28 @@ namespace worklets { -class AnimationFrameBatchinator : public std::enable_shared_from_this { +class AnimationFrameBatchinator + : public std::enable_shared_from_this { public: - using JsiRequestAnimationFrame = std::function; + using JsiRequestAnimationFrame = std::function< + void(facebook::jsi::Runtime &, const facebook::jsi::Value &)>; - void addToBatch(jsi::Function &&callback); + void addToBatch(const facebook::jsi::Value &callback); JsiRequestAnimationFrame getJsiRequestAnimationFrame(); AnimationFrameBatchinator( - const std::shared_ptr &uiWorkletRuntime, - RuntimeBindings::RequestAnimationFrame requestAnimationFrame); + facebook::jsi::Runtime &uiRuntime, + std::function)> + &&forwardedRequestAnimationFrame); private: void flush(); - std::vector> pullCallbacks(); + std::vector> pullCallbacks(); - std::vector> callbacks_{}; + std::vector> callbacks_{}; std::mutex callbacksMutex_{}; std::atomic_bool flushRequested_{}; - std::shared_ptr uiWorkletRuntime_; + facebook::jsi::Runtime *uiRuntime_; std::function)> requestAnimationFrame_; }; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp index a7cb25dd..15f5ad2a 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.cpp @@ -14,10 +14,7 @@ #include #endif // __ANDROID__ -#include -#include #include -#include using namespace facebook; @@ -50,7 +47,7 @@ inline void scheduleOnUI( const auto scope = jsi::Scope(uiWorkletRuntime->getJSIRuntime()); #endif // JS_RUNTIME_HERMES - uiWorkletRuntime->runSync(serializableWorklet); + uiWorkletRuntime->runGuarded(serializableWorklet); }); } @@ -59,10 +56,7 @@ inline jsi::Value executeOnUIRuntimeSync( jsi::Runtime &rt, const jsi::Value &worklet) { if (auto uiWorkletRuntime = weakUIWorkletRuntime.lock()) { - auto serializableWorklet = extractSerializableOrThrow( - rt, worklet, "[Worklets] Only worklets can be executed on UI runtime."); - auto serializedResult = uiWorkletRuntime->runSyncSerialized(serializableWorklet); - return serializedResult->toJSValue(rt); + return uiWorkletRuntime->executeSync(rt, worklet); } return jsi::Value::undefined(); } @@ -76,8 +70,8 @@ inline jsi::Value createWorkletRuntime( std::shared_ptr &initializer, const std::shared_ptr &queue, bool enableEventLoop) { - const auto workletRuntime = - runtimeManager->createWorkletRuntime(std::move(jsiWorkletsModuleProxy), name, initializer, queue); + const auto workletRuntime = runtimeManager->createWorkletRuntime( + jsiWorkletsModuleProxy, name, initializer, queue); return jsi::Object::createFromHostObject(originRuntime, workletRuntime); } @@ -89,9 +83,10 @@ inline jsi::Value propagateModuleUpdate( const auto runtimes = runtimeManager->getAllRuntimes(); for (auto runtime : runtimes) { - runtime->runSync([code, sourceUrl](jsi::Runtime &rt) -> void { + runtime->executeSync([code, sourceUrl](jsi::Runtime &rt) { const auto buffer = std::make_shared(code); rt.evaluateJavaScript(buffer, sourceUrl); + return jsi::Value::undefined(); }); } return jsi::Value::undefined(); @@ -105,11 +100,18 @@ inline jsi::Value reportFatalErrorOnJS( const std::string &name, const std::string &jsEngine) { JSLogger::reportFatalErrorOnJS( - jsScheduler, JSErrorData{.message = message, .stack = stack, .name = name, .jsEngine = jsEngine}); + jsScheduler, + JSErrorData{ + .message = message, + .stack = stack, + .name = name, + .jsEngine = jsEngine}); return jsi::Value::undefined(); } -inline std::shared_ptr extractAsyncQueue(jsi::Runtime &rt, const jsi::Value &value) { +inline std::shared_ptr extractAsyncQueue( + jsi::Runtime &rt, + const jsi::Value &value) { if (!value.isObject()) { return nullptr; } @@ -125,33 +127,13 @@ inline std::shared_ptr extractAsyncQueue(jsi::Runtime &rt, const jsi return asyncQueue; } -inline void registerCustomSerializable( - const std::shared_ptr &runtimeManager, - const std::shared_ptr &memoryManager, - const std::shared_ptr &determine, - const std::shared_ptr &pack, - const std::shared_ptr &unpack, - const int typeId) { - const SerializationData data{.determine = determine, .pack = pack, .unpack = unpack, .typeId = typeId}; - // Prevent registering new worklet runtimes while we are updating existing ones to prevent inconsistencies. - runtimeManager->pause(); - - memoryManager->registerCustomSerializable(data); - for (const auto &runtime : runtimeManager->getAllRuntimes()) { - memoryManager->loadCustomSerializable(runtime, data); - } - - runtimeManager->resume(); -} - JSIWorkletsModuleProxy::JSIWorkletsModuleProxy( const bool isDevBundle, - const std::shared_ptr &script, + const std::shared_ptr &script, const std::string &sourceUrl, const std::shared_ptr &jsQueue, const std::shared_ptr &jsScheduler, const std::shared_ptr &uiScheduler, - const std::shared_ptr &memoryManager, const std::shared_ptr &runtimeManager, const std::weak_ptr &uiWorkletRuntime) : jsi::HostObject(), @@ -161,11 +143,11 @@ JSIWorkletsModuleProxy::JSIWorkletsModuleProxy( jsQueue_(jsQueue), jsScheduler_(jsScheduler), uiScheduler_(uiScheduler), - memoryManager_(memoryManager), runtimeManager_(runtimeManager), uiWorkletRuntime_(uiWorkletRuntime) {} -JSIWorkletsModuleProxy::JSIWorkletsModuleProxy(const JSIWorkletsModuleProxy &other) +JSIWorkletsModuleProxy::JSIWorkletsModuleProxy( + const JSIWorkletsModuleProxy &other) : jsi::HostObject(), isDevBundle_(other.isDevBundle_), script_(other.script_), @@ -173,203 +155,315 @@ JSIWorkletsModuleProxy::JSIWorkletsModuleProxy(const JSIWorkletsModuleProxy &oth jsQueue_(other.jsQueue_), jsScheduler_(other.jsScheduler_), uiScheduler_(other.uiScheduler_), - memoryManager_(other.memoryManager_), runtimeManager_(other.runtimeManager_), uiWorkletRuntime_(other.uiWorkletRuntime_) {} JSIWorkletsModuleProxy::~JSIWorkletsModuleProxy() = default; -std::vector JSIWorkletsModuleProxy::getPropertyNames(jsi::Runtime &rt) { +std::vector JSIWorkletsModuleProxy::getPropertyNames( + jsi::Runtime &rt) { std::vector propertyNames; - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializable")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableBigInt")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableBoolean")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableImport")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableNull")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableNumber")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableString")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableUndefined")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableHostObject")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableInitializer")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableArray")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableFunction")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableTurboModuleLike")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableObject")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableMap")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableSet")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSerializableWorklet")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createCustomSerializable")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "registerCustomSerializable")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializable")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableBigInt")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableBoolean")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableImport")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableNull")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableNumber")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableString")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableUndefined")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableHostObject")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableInitializer")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableArray")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableFunction")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableTurboModuleLike")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableObject")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableMap")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableSet")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSerializableWorklet")); propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "scheduleOnUI")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "executeOnUIRuntimeSync")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createWorkletRuntime")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "scheduleOnRuntime")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "reportFatalErrorOnJS")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "executeOnUIRuntimeSync")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createWorkletRuntime")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "scheduleOnRuntime")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "reportFatalErrorOnJS")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "getStaticFeatureFlag")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "setDynamicFeatureFlag")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "getStaticFeatureFlag")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "setDynamicFeatureFlag")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "createSynchronizable")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "synchronizableGetDirty")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "synchronizableGetBlocking")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "synchronizableSetBlocking")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "synchronizableLock")); - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "synchronizableUnlock")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "createSynchronizable")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "synchronizableGetDirty")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "synchronizableGetBlocking")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "synchronizableSetBlocking")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "synchronizableLock")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "synchronizableUnlock")); #ifdef WORKLETS_BUNDLE_MODE - propertyNames.emplace_back(jsi::PropNameID::forAscii(rt, "propagateModuleUpdate")); + propertyNames.emplace_back( + jsi::PropNameID::forAscii(rt, "propagateModuleUpdate")); #endif // WORKLETS_BUNDLE_MODE return propertyNames; } -jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID &propName) { +jsi::Value JSIWorkletsModuleProxy::get( + jsi::Runtime &rt, + const jsi::PropNameID &propName) { const auto name = propName.utf8(rt); if (name == "createSerializable") { return jsi::Function::createFromHostFunction( - rt, propName, 3, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 3, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableClone(rt, args[0], args[1], args[2]); }); } if (name == "createSerializableBigInt") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableBigInt(rt, args[0].asBigInt(rt)); }); } if (name == "createSerializableBoolean") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableBoolean(rt, args[0].asBool()); }); } if (name == "createSerializableImport") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableImport(rt, args[0].asNumber(), args[1].asString(rt)); + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableImport( + rt, args[0].asNumber(), args[1].asString(rt)); }); } if (name == "createSerializableNumber") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableNumber(rt, args[0].asNumber()); }); } if (name == "createSerializableNull") { return jsi::Function::createFromHostFunction( - rt, propName, 0, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableNull(rt); - }); + rt, + propName, + 0, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableNull(rt); }); } if (name == "createSerializableString") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableString(rt, args[0].asString(rt)); }); } if (name == "createSerializableUndefined") { return jsi::Function::createFromHostFunction( - rt, propName, 0, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableUndefined(rt); - }); + rt, + propName, + 0, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableUndefined(rt); }); } if (name == "createSerializableInitializer") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableInitializer(rt, args[0].asObject(rt)); }); } if (name == "createSerializableArray") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableArray(rt, args[0].asObject(rt).asArray(rt), args[1]); + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableArray( + rt, args[0].asObject(rt).asArray(rt), args[1]); }); } if (name == "createSerializableMap") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableMap(rt, args[0].asObject(rt).asArray(rt), args[1].asObject(rt).asArray(rt)); + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableMap( + rt, + args[0].asObject(rt).asArray(rt), + args[1].asObject(rt).asArray(rt)); }); } if (name == "createSerializableSet") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return makeSerializableSet(rt, args[0].asObject(rt).asArray(rt)); }); } if (name == "createSerializableHostObject") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableHostObject(rt, args[0].asObject(rt).asHostObject(rt)); + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableHostObject( + rt, args[0].asObject(rt).asHostObject(rt)); }); } if (name == "createSerializableFunction") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableFunction(rt, args[0].asObject(rt).asFunction(rt)); + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableFunction( + rt, args[0].asObject(rt).asFunction(rt)); }); } if (name == "createSerializableTurboModuleLike") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableTurboModuleLike(rt, args[0].asObject(rt), args[1].asObject(rt).asHostObject(rt)); + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableTurboModuleLike( + rt, args[0].asObject(rt), args[1].asObject(rt).asHostObject(rt)); }); } if (name == "createSerializableObject") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableObject(rt, args[0].getObject(rt), args[1].getBool(), args[2]); + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableObject( + rt, args[0].getObject(rt), args[1].getBool(), args[2]); }); } if (name == "createSerializableWorklet") { - return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeSerializableWorklet(rt, args[0].getObject(rt), args[1].getBool()); - }); - } - - if (name == "createCustomSerializable") { - return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - return makeCustomSerializable(rt, args[0], args[1].asNumber()); - }); - } - - if (name == "registerCustomSerializable") { return jsi::Function::createFromHostFunction( rt, propName, - 4, - [memoryManager = memoryManager_, runtimeManager = runtimeManager_]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - const auto determine = extractSerializableOrThrow( - rt, args[0], "[Worklets] Determine function must be a worklet."); - const auto pack = extractSerializableOrThrow( - rt, args[1], "[Worklets] Pack function must be a worklet."); - const auto unpack = extractSerializableOrThrow( - rt, args[2], "[Worklets] Unpack function must be a worklet."); - const auto typeId = args[3].asNumber(); - registerCustomSerializable(runtimeManager, memoryManager, determine, pack, unpack, typeId); - return jsi::Value::undefined(); + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + return makeSerializableWorklet( + rt, args[0].getObject(rt), args[1].getBool()); }); } @@ -379,7 +473,10 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & propName, 1, [uiScheduler = uiScheduler_, uiWorkletRuntime = uiWorkletRuntime_]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { scheduleOnUI(uiScheduler, uiWorkletRuntime, rt, args[0]); return jsi::Value::undefined(); }); @@ -391,7 +488,10 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & propName, 1, [uiWorkletRuntime = uiWorkletRuntime_]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return executeOnUIRuntimeSync(uiWorkletRuntime, rt, args[0]); }); } @@ -402,10 +502,14 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & propName, 5, [clone = std::make_shared(*this)]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { const auto name = args[0].asString(rt).utf8(rt); auto serializableInitializer = - extractSerializableOrThrow(rt, args[1], "[Worklets] Initializer must be a worklet."); + extractSerializableOrThrow( + rt, args[1], "[Worklets] Initializer must be a worklet."); const auto useDefaultQueue = args[2].asBool(); std::shared_ptr asyncQueue; @@ -431,7 +535,13 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "scheduleOnRuntime") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi ::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi ::Value &thisValue, + const jsi::Value *args, + size_t count) { worklets::scheduleOnRuntime(rt, args[0], args[1]); return jsi::Value::undefined(); }); @@ -443,7 +553,10 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & propName, 4, [jsScheduler = jsScheduler_]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return reportFatalErrorOnJS( jsScheduler, /* message */ args[0].asString(rt).utf8(rt), @@ -455,8 +568,15 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "createSynchronizable") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { - auto initial = extractSerializableOrThrow(rt, args[0], "[Worklets] Value must be a Serializable."); + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { + auto initial = extractSerializableOrThrow( + rt, args[0], "[Worklets] Value must be a Serializable."); auto synchronizable = std::make_shared(initial); return SerializableJSRef::newNativeStateObject(rt, synchronizable); }); @@ -464,7 +584,13 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "synchronizableGetDirty") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { auto synchronizable = extractSynchronizableOrThrow(rt, args[0]); return synchronizable->getDirty()->toJSValue(rt); }); @@ -472,7 +598,13 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "synchronizableGetBlocking") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { auto synchronizable = extractSynchronizableOrThrow(rt, args[0]); return synchronizable->getBlocking()->toJSValue(rt); }); @@ -480,17 +612,30 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "synchronizableSetBlocking") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { auto synchronizable = extractSynchronizableOrThrow(rt, args[0]); - auto newValue = extractSerializableOrThrow(rt, args[1], "[Worklets] Value must be a Serializable."); - synchronizable->setBlocking(newValue); + auto newValue = extractSerializableOrThrow( + rt, args[1], "[Worklets] Value must be a Serializable."); + synchronizable->setBlocking(std::move(newValue)); return jsi::Value::undefined(); }); } if (name == "synchronizableLock") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { auto synchronizable = extractSynchronizableOrThrow(rt, args[0]); synchronizable->lock(); return jsi::Value::undefined(); @@ -499,7 +644,13 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "synchronizableUnlock") { return jsi::Function::createFromHostFunction( - rt, propName, 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 1, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { auto synchronizable = extractSynchronizableOrThrow(rt, args[0]); synchronizable->unlock(); return jsi::Value::undefined(); @@ -513,7 +664,10 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & propName, 2, [runtimeManager = runtimeManager_]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return propagateModuleUpdate( runtimeManager, /* code */ args[0].asString(rt).utf8(rt), @@ -524,7 +678,13 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "getStaticFeatureFlag") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { return worklets::StaticFeatureFlags::getFlag( /* name */ args[0].asString(rt).utf8(rt)); }); @@ -532,7 +692,13 @@ jsi::Value JSIWorkletsModuleProxy::get(jsi::Runtime &rt, const jsi::PropNameID & if (name == "setDynamicFeatureFlag") { return jsi::Function::createFromHostFunction( - rt, propName, 2, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) { + rt, + propName, + 2, + [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) { worklets::DynamicFeatureFlags::setFlag( /* name */ args[0].asString(rt).utf8(rt), /* value */ args[1].asBool()); diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h index b42529ee..755bdb3a 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/JSIWorkletsModuleProxy.h @@ -5,7 +5,6 @@ #include #include -#include #include #include #include @@ -31,12 +30,11 @@ class JSIWorkletsModuleProxy : public jsi::HostObject { public: explicit JSIWorkletsModuleProxy( const bool isDevBundle, - const std::shared_ptr &script, + const std::shared_ptr &script, const std::string &sourceUrl, const std::shared_ptr &jsQueue, const std::shared_ptr &jsScheduler, const std::shared_ptr &uiScheduler, - const std::shared_ptr &memoryManager, const std::shared_ptr &runtimeManager, const std::weak_ptr &uiWorkletRuntime); @@ -64,7 +62,7 @@ class JSIWorkletsModuleProxy : public jsi::HostObject { return isDevBundle_; } - [[nodiscard]] std::shared_ptr getScript() const { + [[nodiscard]] std::shared_ptr getScript() const { return script_; } @@ -72,22 +70,17 @@ class JSIWorkletsModuleProxy : public jsi::HostObject { return sourceUrl_; } - [[nodiscard]] std::shared_ptr getMemoryManager() const { - return memoryManager_; - } - [[nodiscard]] std::shared_ptr getRuntimeManager() const { return runtimeManager_; } private: const bool isDevBundle_; - const std::shared_ptr script_; + const std::shared_ptr script_; const std::string sourceUrl_; const std::shared_ptr jsQueue_; const std::shared_ptr jsScheduler_; const std::shared_ptr uiScheduler_; - const std::shared_ptr memoryManager_; const std::shared_ptr runtimeManager_; const std::weak_ptr uiWorkletRuntime_; }; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp index 50342854..4e72c838 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #ifdef __ANDROID__ @@ -13,7 +12,6 @@ #endif // __ANDROID__ #include -#include #include using namespace facebook; @@ -28,36 +26,44 @@ WorkletsModuleProxy::WorkletsModuleProxy( const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, std::function &&isJavaScriptThread, - RuntimeBindings runtimeBindings, - const std::shared_ptr &script, + std::function)> + &&forwardedRequestAnimationFrame, + const std::shared_ptr &script, const std::string &sourceUrl) : isDevBundle_(isDevBundleFromRNRuntime(rnRuntime)), jsQueue_(jsQueue), - jsScheduler_(std::make_shared(rnRuntime, jsCallInvoker, std::move(isJavaScriptThread))), + jsScheduler_(std::make_shared( + rnRuntime, + jsCallInvoker, + std::move(isJavaScriptThread))), uiScheduler_(uiScheduler), jsLogger_(std::make_shared(jsScheduler_)), - runtimeBindings_(std::move(runtimeBindings)), script_(script), sourceUrl_(sourceUrl), - memoryManager_(std::make_shared()), runtimeManager_(std::make_shared()), - uiWorkletRuntime_( - runtimeManager_->createUninitializedUIRuntime(jsQueue_, std::make_shared(uiScheduler_))) { + uiWorkletRuntime_(runtimeManager_->createUninitializedUIRuntime( + jsQueue_, + std::make_shared(uiScheduler_))) { /** * We call additional `init` method here because * JSIWorkletsModuleProxy needs a weak_ptr to the UI Runtime. */ uiWorkletRuntime_->init(createJSIWorkletsModuleProxy()); - animationFrameBatchinator_ = - std::make_shared(uiWorkletRuntime_, runtimeBindings_.requestAnimationFrame); + animationFrameBatchinator_ = std::make_shared( + uiWorkletRuntime_->getJSIRuntime(), + std::move(forwardedRequestAnimationFrame)); UIRuntimeDecorator::decorate( - uiWorkletRuntime_->getJSIRuntime(), animationFrameBatchinator_->getJsiRequestAnimationFrame()); + uiWorkletRuntime_->getJSIRuntime(), + animationFrameBatchinator_->getJsiRequestAnimationFrame()); } -std::shared_ptr WorkletsModuleProxy::createJSIWorkletsModuleProxy() const { - assert(uiWorkletRuntime_ && "UI Worklet Runtime must be initialized before creating JSI proxy."); +std::shared_ptr +WorkletsModuleProxy::createJSIWorkletsModuleProxy() const { + assert( + uiWorkletRuntime_ && + "UI Worklet Runtime must be initialized before creating JSI proxy."); return std::make_shared( isDevBundle_, script_, @@ -65,7 +71,6 @@ std::shared_ptr WorkletsModuleProxy::createJSIWorkletsMo jsQueue_, jsScheduler_, uiScheduler_, - memoryManager_, runtimeManager_, uiWorkletRuntime_); } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h index 0e54e9d3..a576e1af 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h @@ -5,8 +5,6 @@ #include #include #include -#include -#include #include #include #include @@ -19,7 +17,8 @@ namespace worklets { -class WorkletsModuleProxy : public std::enable_shared_from_this { +class WorkletsModuleProxy + : public std::enable_shared_from_this { public: explicit WorkletsModuleProxy( jsi::Runtime &rnRuntime, @@ -27,8 +26,9 @@ class WorkletsModuleProxy : public std::enable_shared_from_this &jsCallInvoker, const std::shared_ptr &uiScheduler, std::function &&isJavaScriptQueue, - RuntimeBindings runtimeBindings, - const std::shared_ptr &script, + std::function)> + &&forwardedRequestAnimationFrame, + const std::shared_ptr &script, const std::string &sourceUrl); ~WorkletsModuleProxy(); @@ -49,11 +49,13 @@ class WorkletsModuleProxy : public std::enable_shared_from_this getUIWorkletRuntime() const { + [[nodiscard]] inline std::shared_ptr getUIWorkletRuntime() + const { return uiWorkletRuntime_; } - [[nodiscard]] std::shared_ptr createJSIWorkletsModuleProxy() const; + [[nodiscard]] std::shared_ptr + createJSIWorkletsModuleProxy() const; [[nodiscard]] inline bool isDevBundle() const { return isDevBundle_; @@ -65,10 +67,8 @@ class WorkletsModuleProxy : public std::enable_shared_from_this jsScheduler_; const std::shared_ptr uiScheduler_; const std::shared_ptr jsLogger_; - const RuntimeBindings runtimeBindings_; - const std::shared_ptr script_; + const std::shared_ptr script_; const std::string sourceUrl_; - const std::shared_ptr memoryManager_; const std::shared_ptr runtimeManager_; std::shared_ptr uiWorkletRuntime_; std::shared_ptr animationFrameBatchinator_; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp index 95f0dfaf..7e14d1d0 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp @@ -1,14 +1,13 @@ #include #include -#include -#include #include #include namespace worklets { -void EventHandlerRegistry::registerEventHandler(const std::shared_ptr &eventHandler) { +void EventHandlerRegistry::registerEventHandler( + const std::shared_ptr &eventHandler) { const std::lock_guard lock(instanceMutex); const auto &eventName = eventHandler->getEventName(); auto handlerId = eventHandler->getHandlerId(); @@ -62,27 +61,30 @@ void EventHandlerRegistry::processEvent( const std::lock_guard lock(instanceMutex); auto handlersIt = eventMappingsWithoutTag.find(eventName); if (handlersIt != eventMappingsWithoutTag.end()) { - for (const auto &handler : handlersIt->second) { + for (auto handler : handlersIt->second) { handlersForEvent.push_back(handler.second); } } const auto eventHash = std::make_pair(emitterReactTag, eventName); auto handlersWithTagIt = eventMappingsWithTag.find(eventHash); if (handlersWithTagIt != eventMappingsWithTag.end()) { - for (const auto &handler : handlersWithTagIt->second) { + for (auto handler : handlersWithTagIt->second) { handlersForEvent.push_back(handler.second); } } } jsi::Runtime &rt = uiWorkletRuntime->getJSIRuntime(); - eventPayload.asObject(rt).setProperty(rt, "eventName", jsi::String::createFromUtf8(rt, eventName)); - for (const auto &handler : handlersForEvent) { + eventPayload.asObject(rt).setProperty( + rt, "eventName", jsi::String::createFromUtf8(rt, eventName)); + for (auto handler : handlersForEvent) { handler->process(uiWorkletRuntime, eventTimestamp, eventPayload); } } -bool EventHandlerRegistry::isAnyHandlerWaitingForEvent(const std::string &eventName, const int emitterReactTag) { +bool EventHandlerRegistry::isAnyHandlerWaitingForEvent( + const std::string &eventName, + const int emitterReactTag) { const std::lock_guard lock(instanceMutex); const auto eventHash = std::make_pair(emitterReactTag, eventName); auto it = eventMappingsWithTag.find(eventHash); diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.h index 47158c6c..332bf6ff 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/EventHandlerRegistry.h @@ -18,14 +18,20 @@ namespace worklets { class WorkletEventHandler; class EventHandlerRegistry { - std::map, std::unordered_map>> + std::map< + std::pair, + std::unordered_map>> eventMappingsWithTag; - std::map>> eventMappingsWithoutTag; + std::map< + std::string, + std::unordered_map>> + eventMappingsWithoutTag; std::map> eventHandlers; std::mutex instanceMutex; public: - void registerEventHandler(const std::shared_ptr &eventHandler); + void registerEventHandler( + const std::shared_ptr &eventHandler); void unregisterEventHandler(const uint64_t id); void processEvent( @@ -35,7 +41,9 @@ class EventHandlerRegistry { const int emitterReactTag, const jsi::Value &eventPayload); - bool isAnyHandlerWaitingForEvent(const std::string &eventName, const int emitterReactTag); + bool isAnyHandlerWaitingForEvent( + const std::string &eventName, + const int emitterReactTag); }; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp index 61fe6fa8..035e345d 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp @@ -1,7 +1,5 @@ #include -#include - namespace worklets { std::set WorkletRuntimeRegistry::registry_{}; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/CustomSerializableUnpacker.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/CustomSerializableUnpacker.cpp deleted file mode 100644 index 809b5d09..00000000 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/CustomSerializableUnpacker.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// This file was generated with -// `packages/react-native-worklets/scripts/export-unpackers.js`. -// Please do not modify it directly. - -#include - -namespace worklets { - -const char CustomSerializableUnpackerCode[] = - R"DELIMITER__((function () { - if (!globalThis.__customSerializationRegistry) { - globalThis.__customSerializationRegistry = []; - } - var registry = globalThis.__customSerializationRegistry; - function customSerializableUnpacker(value, typeId) { - var data = registry[typeId]; - if (!data) { - throw new Error("[Worklets] No custom serializable registered for type ID ".concat(typeId, ".")); - } - return data.unpack(value); - } - globalThis.__customSerializableUnpacker = customSerializableUnpacker; -})();)DELIMITER__"; -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/Unpackers.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/Unpackers.h index 503833ed..87bb5b72 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/Unpackers.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/Unpackers.h @@ -3,5 +3,4 @@ namespace worklets { extern const char ValueUnpackerCode[]; extern const char SynchronizableUnpackerCode[]; -extern const char CustomSerializableUnpackerCode[]; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/ValueUnpacker.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/ValueUnpacker.cpp index 661cf4aa..96b5c0de 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/ValueUnpacker.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Resources/ValueUnpacker.cpp @@ -40,7 +40,7 @@ const char ValueUnpackerCode[] = } else if (category === 'RemoteFunction') { var fun = function fun() { var label = remoteFunctionName ? "function `".concat(remoteFunctionName, "`") : 'anonymous function'; - throw new Error("[Worklets] Tried to synchronously call a non-worklet ".concat(label, " on the UI thread.\nSee https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.")); + throw new Error("[Worklets] Tried to synchronously call a non-worklet ".concat(label, " on the UI thread.\nSee https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.")); }; fun.__remoteFunction = objectToUnpack; return fun; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h deleted file mode 100644 index 0ec51464..00000000 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include - -namespace worklets { - -class AsyncQueue : public facebook::jsi::NativeState { - public: - ~AsyncQueue() override = default; - - virtual void push(std::function &&job) = 0; -}; - -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.cpp index 73a1614f..17af570b 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.cpp @@ -1,20 +1,20 @@ #include -#include -#include #include #include namespace worklets { -AsyncQueueImpl::AsyncQueueImpl(const std::string &name) : state_(std::make_shared()) { +AsyncQueueImpl::AsyncQueueImpl(std::string name) + : state_(std::make_shared()) { auto thread = std::thread([name, state = state_] { #if __APPLE__ pthread_setname_np(name.c_str()); #endif while (state->running) { std::unique_lock lock(state->mutex); - state->cv.wait(lock, [state] { return !state->queue.empty() || !state->running; }); + state->cv.wait( + lock, [state] { return !state->queue.empty() || !state->running; }); if (!state->running) { return; } @@ -50,7 +50,8 @@ void AsyncQueueImpl::push(std::function &&job) { state_->cv.notify_one(); } -AsyncQueueUI::AsyncQueueUI(const std::shared_ptr &uiScheduler) : uiScheduler_(uiScheduler) {} +AsyncQueueUI::AsyncQueueUI(const std::shared_ptr &uiScheduler) + : uiScheduler_(uiScheduler) {} void AsyncQueueUI::push(std::function &&job) { uiScheduler_->scheduleOnUI(std::move(job)); diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.h index 72592049..7039da06 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueueImpl.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include @@ -21,7 +21,7 @@ struct AsyncQueueState { class AsyncQueueImpl : public AsyncQueue { public: - explicit AsyncQueueImpl(const std::string &name); + explicit AsyncQueueImpl(std::string name); ~AsyncQueueImpl() override; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.cpp index a5f02653..e0a7890e 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.cpp @@ -1,7 +1,5 @@ #include -#include -#include #include #include #include @@ -10,9 +8,12 @@ namespace worklets { EventLoop::EventLoop( const std::string &name, - const std::shared_ptr &runtime, + const std::shared_ptr runtime, const std::shared_ptr &queue) - : runtime_(runtime), queue_(queue), timeoutsQueueState_(std::make_shared()), name_(name) {} + : runtime_(runtime), + queue_(queue), + timeoutsQueueState_(std::make_shared()), + name_(name) {} EventLoop::~EventLoop() { { @@ -25,50 +26,52 @@ EventLoop::~EventLoop() { void EventLoop::run() { const auto threadName = name_ + "(timeout)"; - auto thread = std::thread([threadName, state = timeoutsQueueState_, weakThis = weak_from_this()] { + auto thread = std::thread( + [threadName, state = timeoutsQueueState_, weakThis = weak_from_this()] { #if __APPLE__ - pthread_setname_np(threadName.c_str()); + pthread_setname_np(threadName.c_str()); #endif - while (state->running) { - std::unique_lock lock(state->mutex); + while (state->running) { + std::unique_lock lock(state->mutex); - if (state->queue.empty()) { - state->cv.wait(lock); - } else { - const auto &nextTimeout = state->queue[0]; - const auto timeToWait = nextTimeout.targetTime - getCurrentTimeInMs(); - state->cv.wait_for(lock, std::chrono::milliseconds(timeToWait)); - } + if (state->queue.empty()) { + state->cv.wait(lock); + } else { + const auto &nextTimeout = state->queue[0]; + const auto timeToWait = + nextTimeout.targetTime - getCurrentTimeInMs(); + state->cv.wait_for(lock, std::chrono::milliseconds(timeToWait)); + } - // Early return if the Event Loop got destroyed already. - if (!state->running) { - return; - } + // Early return if the Event Loop got destroyed already. + if (!state->running) { + return; + } - const auto currentTime = getCurrentTimeInMs(); - std::vector> jobs; - auto &timeouts = state->queue; - timeouts.erase( - std::remove_if( - timeouts.begin(), - timeouts.end(), - [currentTime, &jobs](const Timeout &timeout) { - if (currentTime >= timeout.targetTime) { - jobs.emplace_back(timeout.callback); - return true; - } - return false; - }), - timeouts.end()); - lock.unlock(); + const auto currentTime = getCurrentTimeInMs(); + std::vector> jobs; + auto &timeouts = state->queue; + timeouts.erase( + std::remove_if( + timeouts.begin(), + timeouts.end(), + [currentTime, &jobs](const Timeout &timeout) { + if (currentTime >= timeout.targetTime) { + jobs.emplace_back(timeout.callback); + return true; + } + return false; + }), + timeouts.end()); + lock.unlock(); - if (auto strongThis = weakThis.lock()) { - for (auto &job : jobs) { - strongThis->pushTask(std::move(job)); + if (auto strongThis = weakThis.lock()) { + for (auto &job : jobs) { + strongThis->pushTask(std::move(job)); + } + } } - } - } - }); + }); #ifdef ANDROID pthread_setname_np(thread.native_handle(), threadName.c_str()); #endif @@ -76,14 +79,17 @@ void EventLoop::run() { } void EventLoop::pushTask(std::function &&job) { - queue_->push([weakRuntime = std::weak_ptr{runtime_}, job = std::move(job)] { + queue_->push([weakRuntime = std::weak_ptr{runtime_}, + job = std::move(job)] { if (auto runtime = weakRuntime.lock()) { job(*runtime); } }); } -void EventLoop::pushTimeout(std::function &&job, int64_t delay) { +void EventLoop::pushTimeout( + std::function &&job, + int64_t delay) { { std::unique_lock lock(timeoutsQueueState_->mutex); const auto targetTime = getCurrentTimeInMs() + delay; @@ -97,7 +103,8 @@ void EventLoop::pushTimeout(std::function &&job, int64_t int64_t EventLoop::getCurrentTimeInMs() { const auto currentTime = std::chrono::system_clock::now().time_since_epoch(); - return std::chrono::duration_cast(currentTime).count(); + return std::chrono::duration_cast(currentTime) + .count(); } } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.h index 885bbbe2..5a5b3714 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/RunLoop/EventLoop.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include @@ -33,7 +33,7 @@ class EventLoop : public std::enable_shared_from_this { public: EventLoop( const std::string &name, - const std::shared_ptr &runtime, + const std::shared_ptr runtime, const std::shared_ptr &queue); ~EventLoop(); void run(); diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.cpp deleted file mode 100644 index 1f0fe7d1..00000000 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include -#include -#include - -namespace worklets { -void MemoryManager::loadAllCustomSerializables(const std::shared_ptr &runtime) { - std::lock_guard lock(customSerializationDataMutex_); - runtime->executeSync([&](jsi::Runtime &rt) -> jsi::Value { - const auto registry = getCustomSerializationRegistry(rt); - for (const auto &data : customSerializationData_) { - loadCustomSerializable(rt, registry, data); - } - return jsi::Value::undefined(); - }); -} - -void MemoryManager::loadCustomSerializable( - const std::shared_ptr &runtime, - const SerializationData &data) { - std::lock_guard lock(customSerializationDataMutex_); - runtime->executeSync([this, data](jsi::Runtime &rt) -> jsi::Value { - const auto registry = getCustomSerializationRegistry(rt); - loadCustomSerializable(rt, registry, data); - return jsi::Value::undefined(); - }); -} - -void MemoryManager::loadCustomSerializable( - jsi::Runtime &runtime, - const jsi::Array ®istry, - const SerializationData &data) { - react_native_assert( - registry.length(runtime) == data.typeId && - ("Custom serializable type ID must match registry length. Expected typeId: " + std::to_string(data.typeId) + - ", got registry length: " + std::to_string(registry.length(runtime)) + - ". Custom serializables must be registered in the same order across all runtimes.") - .c_str()); - - const auto item = jsi::Object(runtime); - item.setProperty(runtime, "determine", data.determine->toJSValue(runtime)); - item.setProperty(runtime, "pack", data.pack->toJSValue(runtime)); - item.setProperty(runtime, "unpack", data.unpack->toJSValue(runtime)); - item.setProperty(runtime, "typeId", data.typeId); - - registry.getPropertyAsFunction(runtime, "push").callWithThis(runtime, registry, item); -} - -void MemoryManager::registerCustomSerializable(const SerializationData &data) { - std::lock_guard lock(customSerializationDataMutex_); - customSerializationData_.emplace_back(data); -} - -jsi::Array MemoryManager::getCustomSerializationRegistry(jsi::Runtime &rt) { - const auto data = rt.global().getProperty(rt, "__customSerializationRegistry"); - return data.asObject(rt).asArray(rt); -} - -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.h deleted file mode 100644 index b0366c3d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/MemoryManager.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include -#include -#include - -namespace worklets { -class MemoryManager { - public: - void loadAllCustomSerializables(const std::shared_ptr &workletRuntime); - - void loadCustomSerializable(const std::shared_ptr &workletRuntime, const SerializationData &data); - - void registerCustomSerializable(const SerializationData &data); - - private: - static jsi::Array getCustomSerializationRegistry(jsi::Runtime &rt); - - void loadCustomSerializable(jsi::Runtime &runtime, const jsi::Array ®istry, const SerializationData &data); - - std::mutex customSerializationDataMutex_; - std::vector customSerializationData_; -}; -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.cpp index 67ff75a9..76f513bc 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.cpp @@ -1,10 +1,6 @@ #include #include -#include -#include -#include - using namespace facebook; namespace worklets { @@ -15,6 +11,34 @@ jsi::Function getValueUnpacker(jsi::Runtime &rt) { return valueUnpacker.asObject(rt).asFunction(rt); } +#ifndef NDEBUG + +static const auto callGuardLambda = [](facebook::jsi::Runtime &rt, + const facebook::jsi::Value &thisVal, + const facebook::jsi::Value *args, + size_t count) { + return args[0].asObject(rt).asFunction(rt).call(rt, args + 1, count - 1); +}; + +jsi::Function getCallGuard(jsi::Runtime &rt) { + auto callGuard = rt.global().getProperty(rt, "__callGuardDEV"); + if (callGuard.isObject()) { + // Use JS implementation if `__callGuardDEV` has already been installed. + // This is the desired behavior. + return callGuard.asObject(rt).asFunction(rt); + } + + // Otherwise, fallback to C++ JSI implementation. This is necessary so that we + // can install `__callGuardDEV` itself and should happen only once. Note that + // the C++ implementation doesn't intercept errors and simply throws them as + // C++ exceptions which crashes the app. We assume that installing the guard + // doesn't throw any errors. + return jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forAscii(rt, "callGuard"), 1, callGuardLambda); +} + +#endif // NDEBUG + jsi::Value makeSerializableClone( jsi::Runtime &rt, const jsi::Value &value, @@ -34,26 +58,35 @@ jsi::Value makeSerializableClone( return makeSerializableFunction(rt, object.asFunction(rt)); } else if (object.isArray(rt)) { if (shouldRetainRemote.isBool() && shouldRetainRemote.getBool()) { - serializable = std::make_shared>(rt, object.asArray(rt)); + serializable = + std::make_shared>( + rt, object.asArray(rt)); } else { - serializable = std::make_shared(rt, object.asArray(rt)); + serializable = + std::make_shared(rt, object.asArray(rt)); } } else if (object.isArrayBuffer(rt)) { - serializable = std::make_shared(rt, object.getArrayBuffer(rt)); + serializable = std::make_shared( + rt, object.getArrayBuffer(rt)); } else if (object.isHostObject(rt)) { if (object.isHostObject(rt)) { return object; } - serializable = std::make_shared(rt, object.getHostObject(rt)); + serializable = std::make_shared( + rt, object.getHostObject(rt)); } else { if (shouldRetainRemote.isBool() && shouldRetainRemote.getBool()) { - serializable = std::make_shared>(rt, object, nativeStateSource); + serializable = + std::make_shared>( + rt, object, nativeStateSource); } else { - serializable = std::make_shared(rt, object, nativeStateSource); + serializable = + std::make_shared(rt, object, nativeStateSource); } } } else if (value.isString()) { - serializable = std::make_shared(value.asString(rt).utf8(rt)); + serializable = + std::make_shared(value.asString(rt).utf8(rt)); } else if (value.isUndefined()) { serializable = std::make_shared(); } else if (value.isNull()) { @@ -63,21 +96,25 @@ jsi::Value makeSerializableClone( } else if (value.isNumber()) { serializable = std::make_shared(value.getNumber()); } else if (value.isBigInt()) { - serializable = std::make_shared(rt, value.getBigInt(rt)); + serializable = + std::make_shared(rt, value.getBigInt(rt)); } else if (value.isSymbol()) { // TODO: this is only a placeholder implementation, here we replace symbols // with strings in order to make certain objects to be captured. There isn't - // yet any use-case for using symbols on the UI runtime so it is fine to keep + // yet any usecase for using symbols on the UI runtime so it is fine to keep // it like this for now. - serializable = std::make_shared(value.getSymbol(rt).toString(rt)); + serializable = + std::make_shared(value.getSymbol(rt).toString(rt)); } else { - throw std::runtime_error("[Worklets] Attempted to convert an unsupported value type."); + throw std::runtime_error( + "[Worklets] Attempted to convert an unsupported value type."); } return SerializableJSRef::newNativeStateObject(rt, serializable); } jsi::Value makeSerializableString(jsi::Runtime &rt, const jsi::String &string) { - const auto serializable = std::make_shared(string.utf8(rt)); + const auto serializable = + std::make_shared(string.utf8(rt)); return SerializableJSRef::newNativeStateObject(rt, serializable); } @@ -106,42 +143,58 @@ jsi::Value makeSerializableNull(jsi::Runtime &rt) { return SerializableJSRef::newNativeStateObject(rt, serializable); } -jsi::Value makeSerializableWorklet(jsi::Runtime &rt, const jsi::Object &object, const bool &shouldRetainRemote) { +jsi::Value makeSerializableWorklet( + jsi::Runtime &rt, + const jsi::Object &object, + const bool &shouldRetainRemote) { std::shared_ptr serializable; if (shouldRetainRemote) { - serializable = std::make_shared>(rt, object); + serializable = std::make_shared>( + rt, object); } else { serializable = std::make_shared(rt, object); } return SerializableJSRef::newNativeStateObject(rt, serializable); } -jsi::Value makeSerializableInitializer(jsi::Runtime &rt, const jsi::Object &initializerObject) { - const auto serializable = std::make_shared(rt, initializerObject); +jsi::Value makeSerializableInitializer( + jsi::Runtime &rt, + const jsi::Object &initializerObject) { + const auto serializable = + std::make_shared(rt, initializerObject); return SerializableJSRef::newNativeStateObject(rt, serializable); } jsi::Value makeSerializableFunction(jsi::Runtime &rt, jsi::Function function) { std::shared_ptr serializable; if (function.isHostFunction(rt)) { - serializable = std::make_shared(rt, std::move(function)); + serializable = + std::make_shared(rt, std::move(function)); } else { - serializable = std::make_shared(rt, std::move(function)); + serializable = + std::make_shared(rt, std::move(function)); } return SerializableJSRef::newNativeStateObject(rt, serializable); } -jsi::Value makeSerializableArray(jsi::Runtime &rt, const jsi::Array &array, const jsi::Value &shouldRetainRemote) { +jsi::Value makeSerializableArray( + jsi::Runtime &rt, + const jsi::Array &array, + const jsi::Value &shouldRetainRemote) { std::shared_ptr serializable; if (shouldRetainRemote.isBool() && shouldRetainRemote.getBool()) { - serializable = std::make_shared>(rt, array); + serializable = + std::make_shared>(rt, array); } else { serializable = std::make_shared(rt, array); } return SerializableJSRef::newNativeStateObject(rt, serializable); } -jsi::Value makeSerializableMap(jsi::Runtime &rt, const jsi::Array &keys, const jsi::Array &values) { +jsi::Value makeSerializableMap( + jsi::Runtime &rt, + const jsi::Array &keys, + const jsi::Array &values) { auto serializable = std::make_shared(rt, keys, values); return SerializableJSRef::newNativeStateObject(rt, serializable); } @@ -151,7 +204,9 @@ jsi::Value makeSerializableSet(jsi::Runtime &rt, const jsi::Array &values) { return SerializableJSRef::newNativeStateObject(rt, serializable); } -jsi::Value makeSerializableHostObject(jsi::Runtime &rt, const std::shared_ptr &value) { +jsi::Value makeSerializableHostObject( + jsi::Runtime &rt, + const std::shared_ptr &value) { const auto serializable = std::make_shared(rt, value); return SerializableJSRef::newNativeStateObject(rt, serializable); } @@ -160,12 +215,17 @@ jsi::Value makeSerializableTurboModuleLike( jsi::Runtime &rt, const jsi::Object &object, const std::shared_ptr &proto) { - const auto serializable = std::make_shared(rt, object, proto); + const auto serializable = + std::make_shared(rt, object, proto); return SerializableJSRef::newNativeStateObject(rt, serializable); } -jsi::Value makeSerializableImport(jsi::Runtime &rt, const double source, const jsi::String &imported) { - auto serializable = std::make_shared(rt, source, imported); +jsi::Value makeSerializableImport( + jsi::Runtime &rt, + const double source, + const jsi::String &imported) { + auto serializable = + std::make_shared(rt, source, imported); return SerializableJSRef::newNativeStateObject(rt, serializable); } @@ -176,9 +236,11 @@ jsi::Value makeSerializableObject( const jsi::Value &nativeStateSource) { std::shared_ptr serializable; if (shouldRetainRemote) { - serializable = std::make_shared>(rt, object, nativeStateSource); + serializable = std::make_shared>( + rt, object, nativeStateSource); } else { - serializable = std::make_shared(rt, object, nativeStateSource); + serializable = + std::make_shared(rt, object, nativeStateSource); } return SerializableJSRef::newNativeStateObject(rt, serializable); } @@ -193,14 +255,15 @@ std::shared_ptr extractSerializableOrThrow( auto nativeState = object.getNativeState(rt); return std::dynamic_pointer_cast(nativeState)->value(); } - throw std::runtime_error("[Worklets] Attempted to extract from a Object that wasn't converted to a Serializable."); + throw std::runtime_error( + "[Worklets] Attempted to extract from a Object that wasn't converted to a Serializable."); } else if (maybeSerializableValue.isUndefined()) { return Serializable::undefined(); } throw std::runtime_error(errorMessage); } -Serializable::~Serializable() = default; +Serializable::~Serializable() {} std::shared_ptr Serializable::undefined() { static auto undefined = std::make_shared(); @@ -230,13 +293,15 @@ jsi::Value RetainingSerializable::toJSValue(jsi::Runtime &rt) { return BaseClass::toJSValue(rt); } -SerializableJSRef::~SerializableJSRef() = default; +SerializableJSRef::~SerializableJSRef() {} -SerializableArray::SerializableArray(jsi::Runtime &rt, const jsi::Array &array) : Serializable(ValueType::ArrayType) { +SerializableArray::SerializableArray(jsi::Runtime &rt, const jsi::Array &array) + : Serializable(ArrayType) { auto size = array.size(rt); data_.reserve(size); for (size_t i = 0; i < size; i++) { - data_.push_back(extractSerializableOrThrow(rt, array.getValueAtIndex(rt, i))); + data_.push_back( + extractSerializableOrThrow(rt, array.getValueAtIndex(rt, i))); } } @@ -251,14 +316,19 @@ jsi::Value SerializableArray::toJSValue(jsi::Runtime &rt) { jsi::Value SerializableArrayBuffer::toJSValue(jsi::Runtime &rt) { auto size = static_cast(data_.size()); - auto arrayBuffer = - rt.global().getPropertyAsFunction(rt, "ArrayBuffer").callAsConstructor(rt, size).getObject(rt).getArrayBuffer(rt); + auto arrayBuffer = rt.global() + .getPropertyAsFunction(rt, "ArrayBuffer") + .callAsConstructor(rt, size) + .getObject(rt) + .getArrayBuffer(rt); memcpy(arrayBuffer.data(rt), data_.data(), size); return arrayBuffer; } -SerializableObject::SerializableObject(jsi::Runtime &rt, const jsi::Object &object) - : Serializable(ValueType::ObjectType) { +SerializableObject::SerializableObject( + jsi::Runtime &rt, + const jsi::Object &object) + : Serializable(ObjectType) { auto propertyNames = object.getPropertyNames(rt); auto size = propertyNames.size(rt); data_.reserve(size); @@ -272,17 +342,24 @@ SerializableObject::SerializableObject(jsi::Runtime &rt, const jsi::Object &obje } } -SerializableObject::SerializableObject(jsi::Runtime &rt, const jsi::Object &object, const jsi::Value &nativeStateSource) +SerializableObject::SerializableObject( + jsi::Runtime &rt, + const jsi::Object &object, + const jsi::Value &nativeStateSource) : SerializableObject(rt, object) { - if (nativeStateSource.isObject() && nativeStateSource.asObject(rt).hasNativeState(rt)) { + if (nativeStateSource.isObject() && + nativeStateSource.asObject(rt).hasNativeState(rt)) { nativeState_ = nativeStateSource.asObject(rt).getNativeState(rt); } } jsi::Value SerializableObject::toJSValue(jsi::Runtime &rt) { auto obj = jsi::Object(rt); - for (const auto &i : data_) { - obj.setProperty(rt, jsi::String::createFromUtf8(rt, i.first), i.second->toJSValue(rt)); + for (size_t i = 0, size = data_.size(); i < size; i++) { + obj.setProperty( + rt, + jsi::String::createFromUtf8(rt, data_[i].first), + data_[i].second->toJSValue(rt)); } if (nativeState_ != nullptr) { obj.setNativeState(rt, nativeState_); @@ -290,10 +367,15 @@ jsi::Value SerializableObject::toJSValue(jsi::Runtime &rt) { return obj; } -SerializableMap::SerializableMap(jsi::Runtime &rt, const jsi::Array &keys, const jsi::Array &values) - : Serializable(ValueType::MapType) { +SerializableMap::SerializableMap( + jsi::Runtime &rt, + const jsi::Array &keys, + const jsi::Array &values) + : Serializable(MapType) { auto size = keys.size(rt); - react_native_assert(size == values.size(rt) && "Keys and values arrays must have the same size."); + react_native_assert( + size == values.size(rt) && + "Keys and values arrays must have the same size."); data_.reserve(size); for (size_t i = 0; i < size; i++) { auto key = extractSerializableOrThrow(rt, keys.getValueAtIndex(rt, i)); @@ -312,16 +394,19 @@ jsi::Value SerializableMap::toJSValue(jsi::Runtime &rt) { } const auto &global = rt.global(); - auto map = global.getPropertyAsFunction(rt, "Map").callAsConstructor(rt, std::move(keyValues)); + auto map = global.getPropertyAsFunction(rt, "Map").callAsConstructor( + rt, std::move(keyValues)); return map; } -SerializableSet::SerializableSet(jsi::Runtime &rt, const jsi::Array &values) : Serializable(ValueType::SetType) { +SerializableSet::SerializableSet(jsi::Runtime &rt, const jsi::Array &values) + : Serializable(SetType) { auto size = values.size(rt); data_.reserve(size); for (size_t i = 0; i < size; i++) { - data_.push_back(extractSerializableOrThrow(rt, values.getValueAtIndex(rt, i))); + data_.push_back( + extractSerializableOrThrow(rt, values.getValueAtIndex(rt, i))); } } @@ -332,7 +417,8 @@ jsi::Value SerializableSet::toJSValue(jsi::Runtime &rt) { } const auto &global = rt.global(); - auto set = global.getPropertyAsFunction(rt, "Set").callAsConstructor(rt, std::move(values)); + auto set = global.getPropertyAsFunction(rt, "Set").callAsConstructor( + rt, std::move(values)); return set; } @@ -342,15 +428,20 @@ jsi::Value SerializableHostObject::toJSValue(jsi::Runtime &rt) { } jsi::Value SerializableHostFunction::toJSValue(jsi::Runtime &rt) { - return jsi::Function::createFromHostFunction(rt, jsi::PropNameID::forUtf8(rt, name_), paramCount_, hostFunction_); + return jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forUtf8(rt, name_), paramCount_, hostFunction_); } jsi::Value SerializableWorklet::toJSValue(jsi::Runtime &rt) { react_native_assert( - std::any_of(data_.cbegin(), data_.cend(), [](const auto &item) { return item.first == "__workletHash"; }) && + std::any_of( + data_.cbegin(), + data_.cend(), + [](const auto &item) { return item.first == "__workletHash"; }) && "SerializableWorklet doesn't have `__workletHash` property"); jsi::Value obj = SerializableObject::toJSValue(rt); - return getValueUnpacker(rt).call(rt, obj, jsi::String::createFromAscii(rt, "Worklet")); + return getValueUnpacker(rt).call( + rt, obj, jsi::String::createFromAscii(rt, "Worklet")); } jsi::Value SerializableImport::toJSValue(jsi::Runtime &rt) { @@ -364,7 +455,11 @@ jsi::Value SerializableImport::toJSValue(jsi::Runtime &rt) { } const auto imported = jsi::String::createFromUtf8(rt, imported_); - return metroRequire.asObject(rt).asFunction(rt).call(rt, source_).asObject(rt).getProperty(rt, imported); + return metroRequire.asObject(rt) + .asFunction(rt) + .call(rt, source_) + .asObject(rt) + .getProperty(rt, imported); } jsi::Value SerializableRemoteFunction::toJSValue(jsi::Runtime &rt) { @@ -386,12 +481,12 @@ jsi::Value SerializableRemoteFunction::toJSValue(jsi::Runtime &rt) { jsi::Value SerializableInitializer::toJSValue(jsi::Runtime &rt) { if (remoteValue_ == nullptr) { auto initObj = initializer_->toJSValue(rt); - auto value = std::make_unique( - getValueUnpacker(rt).call(rt, initObj, jsi::String::createFromAscii(rt, "Handle"))); + auto value = std::make_unique(getValueUnpacker(rt).call( + rt, initObj, jsi::String::createFromAscii(rt, "Handle"))); // We are locking the initialization here since the thread that is - // initializing can be preempted on runtime lock. E.g. - // UI thread can be preempted on initialization of a shared value and then + // initalizing can be pre-empted on runtime lock. E.g. + // UI thread can be pre-empted on initialization of a shared value and then // JS thread can try to access the shared value, locking the whole runtime. // If we put the lock on `getValueUnpacker` part (basically any part that // requires runtime) we would get a deadlock since UI thread would never @@ -406,7 +501,8 @@ jsi::Value SerializableInitializer::toJSValue(jsi::Runtime &rt) { return jsi::Value(rt, *remoteValue_); } auto initObj = initializer_->toJSValue(rt); - return getValueUnpacker(rt).call(rt, initObj, jsi::String::createFromAscii(rt, "Handle")); + return getValueUnpacker(rt).call( + rt, initObj, jsi::String::createFromAscii(rt, "Handle")); } jsi::Value SerializableString::toJSValue(jsi::Runtime &rt) { @@ -414,58 +510,36 @@ jsi::Value SerializableString::toJSValue(jsi::Runtime &rt) { } jsi::Value SerializableBigInt::toJSValue(jsi::Runtime &rt) { - if (fastValue_.has_value()) { - return jsi::BigInt::fromInt64(rt, fastValue_.value()); - } else { - return rt.global().getPropertyAsFunction(rt, "BigInt").call(rt, jsi::String::createFromUtf8(rt, slowValue_)); - } + return rt.global() + .getPropertyAsFunction(rt, "BigInt") + .call(rt, jsi::String::createFromUtf8(rt, string_)); } jsi::Value SerializableScalar::toJSValue(jsi::Runtime &) { switch (valueType_) { - case Serializable::ValueType::UndefinedType: + case Serializable::UndefinedType: return jsi::Value(); - case Serializable::ValueType::NullType: + case Serializable::NullType: return jsi::Value(nullptr); - case Serializable::ValueType::BooleanType: + case Serializable::BooleanType: return jsi::Value(data_.boolean); - case Serializable::ValueType::NumberType: + case Serializable::NumberType: return jsi::Value(data_.number); default: - throw std::runtime_error("[Worklets] Attempted to convert object that's not of a scalar type."); + throw std::runtime_error( + "[Worklets] Attempted to convert object that's not of a scalar type."); } } jsi::Value SerializableTurboModuleLike::toJSValue(jsi::Runtime &rt) { auto obj = properties_->toJSValue(rt).asObject(rt); const auto prototype = proto_->toJSValue(rt); - rt.global().getPropertyAsObject(rt, "Object").getPropertyAsFunction(rt, "setPrototypeOf").call(rt, obj, prototype); + rt.global() + .getPropertyAsObject(rt, "Object") + .getPropertyAsFunction(rt, "setPrototypeOf") + .call(rt, obj, prototype); return obj; } -jsi::Function getCustomSerializableUnpacker(jsi::Runtime &rt) { - auto customSerializableUnpacker = rt.global().getProperty(rt, "__customSerializableUnpacker"); - react_native_assert(customSerializableUnpacker.isObject() && "customSerializableUnpacker not found"); - return customSerializableUnpacker.asObject(rt).asFunction(rt); -} - -jsi::Value CustomSerializable::toJSValue(jsi::Runtime &rt) { - try { - auto unpack = getCustomSerializableUnpacker(rt); - auto data = data_->toJSValue(rt); - - return unpack.call(rt, data, jsi::Value(typeId_)); - } catch (jsi::JSError &e) { - throw std::runtime_error( - std::string("[Worklets] Failed to deserialize CustomSerializable. Reason: ") + e.getMessage()); - } -} - -jsi::Value makeCustomSerializable(jsi::Runtime &rt, const jsi::Value &data, const int typeId) { - auto rawData = extractSerializableOrThrow(rt, data, "[Worklets] Data must be a Serializable object."); - auto customSerializable = std::make_shared(rawData, typeId); - return SerializableJSRef::newNativeStateObject(rt, customSerializable); -} - } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h index 771b6be9..18012344 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Serializable.h @@ -15,7 +15,30 @@ namespace worklets { jsi::Function getValueUnpacker(jsi::Runtime &rt); -inline void cleanupIfRuntimeExists(jsi::Runtime *rt, std::unique_ptr &value) { +#ifndef NDEBUG +jsi::Function getCallGuard(jsi::Runtime &rt); +#endif // NDEBUG + +// If possible, please use `WorkletRuntime::runGuarded` instead. +template +inline jsi::Value runOnRuntimeGuarded( + jsi::Runtime &rt, + const jsi::Value &function, + Args &&...args) { + // We only use callGuard in debug mode, otherwise we call the provided + // function directly. CallGuard provides a way of capturing exceptions in + // JavaScript and propagating them to the main React Native thread such that + // they can be presented using RN's LogBox. +#ifndef NDEBUG + return getCallGuard(rt).call(rt, function, args...); +#else + return function.asObject(rt).asFunction(rt).call(rt, args...); +#endif // NDEBUG +} + +inline void cleanupIfRuntimeExists( + jsi::Runtime *rt, + std::unique_ptr &value) { if (rt != nullptr && !WorkletRuntimeRegistry::isRuntimeAlive(rt)) { // The below use of unique_ptr.release prevents the smart pointer from // calling the destructor of the kept object. This effectively results in @@ -35,7 +58,7 @@ inline void cleanupIfRuntimeExists(jsi::Runtime *rt, std::unique_ptr // before the runtime is terminated. Note that the underlying memory that // jsi::Value refers to is managed by the VM and gets freed along with the // runtime. - value.release(); // NOLINT + value.release(); } } @@ -45,7 +68,7 @@ class Serializable { virtual ~Serializable(); - enum class ValueType : std::uint8_t { + enum ValueType { UndefinedType, NullType, BooleanType, @@ -66,7 +89,6 @@ class Serializable { TurboModuleLikeType, ImportType, SynchronizableType, - CustomType, }; explicit Serializable(ValueType valueType) : valueType_(valueType) {} @@ -105,15 +127,18 @@ class SerializableJSRef : public jsi::NativeState { const std::shared_ptr value_; public: - explicit SerializableJSRef(const std::shared_ptr &value) : value_(value) {} + explicit SerializableJSRef(const std::shared_ptr &value) + : value_(value) {} - ~SerializableJSRef() override; + virtual ~SerializableJSRef(); std::shared_ptr value() const { return value_; } - static jsi::Object newNativeStateObject(jsi::Runtime &rt, const std::shared_ptr &value) { + static jsi::Object newNativeStateObject( + jsi::Runtime &rt, + const std::shared_ptr &value) { auto object = jsi::Object(rt); object.setNativeState(rt, std::make_shared(value)); object.setProperty(rt, "__serializableRef", true); @@ -150,35 +175,52 @@ jsi::Value makeSerializableObject( bool shouldRetainRemote, const jsi::Value &nativeStateSource); -jsi::Value makeSerializableImport(jsi::Runtime &rt, double source, const jsi::String &imported); +jsi::Value makeSerializableImport( + jsi::Runtime &rt, + const double source, + const jsi::String &imported); -jsi::Value makeSerializableHostObject(jsi::Runtime &rt, const std::shared_ptr &value); +jsi::Value makeSerializableHostObject( + jsi::Runtime &rt, + const std::shared_ptr &value); -jsi::Value makeSerializableArray(jsi::Runtime &rt, const jsi::Array &array, const jsi::Value &shouldRetainRemote); +jsi::Value makeSerializableArray( + jsi::Runtime &rt, + const jsi::Array &array, + const jsi::Value &shouldRetainRemote); -jsi::Value makeSerializableMap(jsi::Runtime &rt, const jsi::Array &keys, const jsi::Array &values); +jsi::Value makeSerializableMap( + jsi::Runtime &rt, + const jsi::Array &keys, + const jsi::Array &values); jsi::Value makeSerializableSet(jsi::Runtime &rt, const jsi::Array &values); -jsi::Value makeSerializableInitializer(jsi::Runtime &rt, const jsi::Object &initializerObject); +jsi::Value makeSerializableInitializer( + jsi::Runtime &rt, + const jsi::Object &initializerObject); jsi::Value makeSerializableFunction(jsi::Runtime &rt, jsi::Function function); -jsi::Value makeSerializableWorklet(jsi::Runtime &rt, const jsi::Object &object, const bool &shouldRetainRemote); - -jsi::Value makeCustomSerializable(jsi::Runtime &rt, const jsi::Value &data, int typeId); +jsi::Value makeSerializableWorklet( + jsi::Runtime &rt, + const jsi::Object &object, + const bool &shouldRetainRemote); std::shared_ptr extractSerializableOrThrow( jsi::Runtime &rt, const jsi::Value &maybeSerializableValue, - const std::string &errorMessage = "[Worklets] Expecting the object to be of type SerializableJSRef."); + const std::string &errorMessage = + "[Worklets] Expecting the object to be of type SerializableJSRef."); template std::shared_ptr extractSerializableOrThrow( jsi::Runtime &rt, const jsi::Value &serializableRef, - const std::string &errorMessage = "[Worklets] Provided serializable object is of an incompatible type.") { - auto res = std::dynamic_pointer_cast(extractSerializableOrThrow(rt, serializableRef, errorMessage)); + const std::string &errorMessage = + "[Worklets] Provided serializable object is of an incompatible type.") { + auto res = std::dynamic_pointer_cast( + extractSerializableOrThrow(rt, serializableRef, errorMessage)); if (!res) { throw std::runtime_error(errorMessage); } @@ -199,7 +241,10 @@ class SerializableObject : public Serializable { public: SerializableObject(jsi::Runtime &rt, const jsi::Object &object); - SerializableObject(jsi::Runtime &rt, const jsi::Object &object, const jsi::Value &nativeStateSource); + SerializableObject( + jsi::Runtime &rt, + const jsi::Object &object, + const jsi::Value &nativeStateSource); jsi::Value toJSValue(jsi::Runtime &rt) override; @@ -210,12 +255,17 @@ class SerializableObject : public Serializable { class SerializableMap : public Serializable { public: - SerializableMap(jsi::Runtime &rt, const jsi::Array &keys, const jsi::Array &values); + SerializableMap( + jsi::Runtime &rt, + const jsi::Array &keys, + const jsi::Array &values); jsi::Value toJSValue(jsi::Runtime &rt) override; protected: - std::vector, std::shared_ptr>> data_; + std::vector< + std::pair, std::shared_ptr>> + data_; }; class SerializableSet : public Serializable { @@ -230,8 +280,10 @@ class SerializableSet : public Serializable { class SerializableHostObject : public Serializable { public: - SerializableHostObject(jsi::Runtime &, const std::shared_ptr &hostObject) - : Serializable(ValueType::HostObjectType), hostObject_(hostObject) {} + SerializableHostObject( + jsi::Runtime &, + const std::shared_ptr &hostObject) + : Serializable(HostObjectType), hostObject_(hostObject) {} jsi::Value toJSValue(jsi::Runtime &rt) override; @@ -242,7 +294,7 @@ class SerializableHostObject : public Serializable { class SerializableHostFunction : public Serializable { public: SerializableHostFunction(jsi::Runtime &rt, jsi::Function function) - : Serializable(ValueType::HostFunctionType), + : Serializable(HostFunctionType), hostFunction_(function.getHostFunction(rt)), name_(function.getProperty(rt, "name").asString(rt).utf8(rt)), paramCount_(function.getProperty(rt, "length").asNumber()) {} @@ -258,8 +310,10 @@ class SerializableHostFunction : public Serializable { class SerializableArrayBuffer : public Serializable { public: SerializableArrayBuffer(jsi::Runtime &rt, const jsi::ArrayBuffer &arrayBuffer) - : Serializable(ValueType::ArrayBufferType), - data_(arrayBuffer.data(rt), arrayBuffer.data(rt) + arrayBuffer.size(rt)) {} + : Serializable(ArrayBufferType), + data_( + arrayBuffer.data(rt), + arrayBuffer.data(rt) + arrayBuffer.size(rt)) {} jsi::Value toJSValue(jsi::Runtime &rt) override; @@ -269,8 +323,9 @@ class SerializableArrayBuffer : public Serializable { class SerializableWorklet : public SerializableObject { public: - SerializableWorklet(jsi::Runtime &rt, const jsi::Object &worklet) : SerializableObject(rt, worklet) { - valueType_ = ValueType::WorkletType; + SerializableWorklet(jsi::Runtime &rt, const jsi::Object &worklet) + : SerializableObject(rt, worklet) { + valueType_ = WorkletType; } jsi::Value toJSValue(jsi::Runtime &rt) override; @@ -278,8 +333,13 @@ class SerializableWorklet : public SerializableObject { class SerializableImport : public Serializable { public: - SerializableImport(jsi::Runtime &rt, const double source, const jsi::String &imported) - : Serializable(ValueType::ImportType), source_(source), imported_(imported.utf8(rt)) {} + SerializableImport( + jsi::Runtime &rt, + const double source, + const jsi::String &imported) + : Serializable(ImportType), + source_(source), + imported_(imported.utf8(rt)) {} jsi::Value toJSValue(jsi::Runtime &rt) override; @@ -288,8 +348,9 @@ class SerializableImport : public Serializable { const std::string imported_; }; -class SerializableRemoteFunction : public Serializable, - public std::enable_shared_from_this { +class SerializableRemoteFunction + : public Serializable, + public std::enable_shared_from_this { private: jsi::Runtime *runtime_; #ifndef NDEBUG @@ -299,7 +360,7 @@ class SerializableRemoteFunction : public Serializable, public: SerializableRemoteFunction(jsi::Runtime &rt, jsi::Function &&function) - : Serializable(ValueType::RemoteFunctionType), + : Serializable(RemoteFunctionType), runtime_(&rt), #ifndef NDEBUG name_(function.getProperty(rt, "name").asString(rt).utf8(rt)), @@ -307,7 +368,7 @@ class SerializableRemoteFunction : public Serializable, function_(std::make_unique(rt, std::move(function))) { } - ~SerializableRemoteFunction() override { + ~SerializableRemoteFunction() { cleanupIfRuntimeExists(runtime_, function_); } @@ -326,11 +387,14 @@ class SerializableInitializer : public Serializable { jsi::Runtime *remoteRuntime_; public: - SerializableInitializer(jsi::Runtime &rt, const jsi::Object &initializerObject) - : Serializable(ValueType::HandleType), - initializer_(std::make_unique(rt, initializerObject)) {} + SerializableInitializer( + jsi::Runtime &rt, + const jsi::Object &initializerObject) + : Serializable(HandleType), + initializer_( + std::make_unique(rt, initializerObject)) {} - ~SerializableInitializer() override { + ~SerializableInitializer() { cleanupIfRuntimeExists(remoteRuntime_, remoteValue_); } @@ -339,7 +403,8 @@ class SerializableInitializer : public Serializable { class SerializableString : public Serializable { public: - explicit SerializableString(const std::string &string) : Serializable(ValueType::StringType), data_(string) {} + explicit SerializableString(const std::string &string) + : Serializable(StringType), data_(string) {} jsi::Value toJSValue(jsi::Runtime &rt) override; @@ -349,36 +414,27 @@ class SerializableString : public Serializable { class SerializableBigInt : public Serializable { public: - explicit SerializableBigInt(jsi::Runtime &rt, const jsi::BigInt &bigInt) : Serializable(ValueType::BigIntType) { - if (bigInt.isInt64(rt)) { - fastValue_ = bigInt.getInt64(rt); - } else { - slowValue_ = bigInt.toString(rt).utf8(rt); - } - } + explicit SerializableBigInt(jsi::Runtime &rt, const jsi::BigInt &bigint) + : Serializable(BigIntType), string_(bigint.toString(rt).utf8(rt)) {} jsi::Value toJSValue(jsi::Runtime &rt) override; protected: - /** - * This member is used only when the BigInt fits into int64_t range. - */ - std::optional fastValue_{}; - std::string slowValue_{}; + const std::string string_; }; class SerializableScalar : public Serializable { public: - explicit SerializableScalar(double number) : Serializable(ValueType::NumberType) { + explicit SerializableScalar(double number) : Serializable(NumberType) { data_.number = number; } - explicit SerializableScalar(bool boolean) : Serializable(ValueType::BooleanType) { + explicit SerializableScalar(bool boolean) : Serializable(BooleanType) { data_.boolean = boolean; } - SerializableScalar() : Serializable(ValueType::UndefinedType) {} - explicit SerializableScalar(std::nullptr_t) : Serializable(ValueType::NullType) {} + SerializableScalar() : Serializable(UndefinedType) {} + explicit SerializableScalar(std::nullptr_t) : Serializable(NullType) {} - jsi::Value toJSValue(jsi::Runtime &) override; + jsi::Value toJSValue(jsi::Runtime &); protected: union Data { @@ -396,7 +452,7 @@ class SerializableTurboModuleLike : public Serializable { jsi::Runtime &rt, const jsi::Object &object, const std::shared_ptr &proto) - : Serializable(ValueType::TurboModuleLikeType), + : Serializable(TurboModuleLikeType), proto_(std::make_unique(rt, proto)), properties_(std::make_unique(rt, object)) {} @@ -407,25 +463,4 @@ class SerializableTurboModuleLike : public Serializable { const std::unique_ptr properties_; }; -jsi::Function getCustomSerializableUnpacker(jsi::Runtime &rt); - -class CustomSerializable : public Serializable { - public: - CustomSerializable(std::shared_ptr data, const int typeId) - : Serializable(ValueType::CustomType), data_(std::move(data)), typeId_(typeId) {} - - jsi::Value toJSValue(jsi::Runtime &rt) override; - - private: - const std::shared_ptr data_; - const int typeId_; -}; - -struct SerializationData { - std::shared_ptr determine; - std::shared_ptr pack; - std::shared_ptr unpack; - int typeId; -}; - } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.cpp index 5d89d993..46c37faa 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.cpp @@ -1,7 +1,6 @@ #include #include -#include #include namespace worklets { @@ -33,7 +32,8 @@ void Synchronizable::setBlocking(const std::shared_ptr &value) { jsi::Value Synchronizable::toJSValue(jsi::Runtime &rt) { auto synchronizableUnpacker = getSynchronizableUnpacker(rt); - auto ref = SerializableJSRef::newNativeStateObject(rt, this->shared_from_this()); + auto ref = + SerializableJSRef::newNativeStateObject(rt, this->shared_from_this()); return synchronizableUnpacker.call(rt, std::move(ref)); } @@ -41,17 +41,25 @@ Synchronizable::Synchronizable(const std::shared_ptr &value) : Serializable(ValueType::SynchronizableType), value_(value) {} jsi::Function getSynchronizableUnpacker(jsi::Runtime &rt) { - auto synchronizableUnpacker = rt.global().getProperty(rt, "__synchronizableUnpacker"); - react_native_assert(synchronizableUnpacker.isObject() && "synchronizableUnpacker not found"); + auto synchronizableUnpacker = + rt.global().getProperty(rt, "__synchronizableUnpacker"); + react_native_assert( + synchronizableUnpacker.isObject() && "synchronizableUnpacker not found"); return synchronizableUnpacker.asObject(rt).asFunction(rt); } -std::shared_ptr extractSynchronizableOrThrow(jsi::Runtime &rt, const jsi::Value &value) { - auto serializable = - extractSerializableOrThrow(rt, value, "[Worklets] Expecting the object to be of type SerializableJSRef."); +std::shared_ptr extractSynchronizableOrThrow( + jsi::Runtime &rt, + const jsi::Value &value) { + auto serializable = extractSerializableOrThrow( + rt, + value, + "[Worklets] Expecting the object to be of type SerializableJSRef."); auto synchronizable = std::dynamic_pointer_cast(serializable); - react_native_assert(synchronizable != nullptr && "[Worklets] Expected the object to be a Synchronizable."); + react_native_assert( + synchronizable != nullptr && + "[Worklets] Expected the object to be a Synchronizable."); return synchronizable; } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.h index 55e3a56e..65229c23 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/Synchronizable.h @@ -44,7 +44,7 @@ class Synchronizable : public SynchronizableAccess, explicit Synchronizable(const std::shared_ptr &value); - ~Synchronizable() override = default; + virtual ~Synchronizable() = default; private: std::shared_ptr value_; @@ -52,6 +52,8 @@ class Synchronizable : public SynchronizableAccess, jsi::Function getSynchronizableUnpacker(jsi::Runtime &rt); -std::shared_ptr extractSynchronizableOrThrow(jsi::Runtime &rt, const jsi::Value &value); +std::shared_ptr extractSynchronizableOrThrow( + jsi::Runtime &rt, + const jsi::Value &value); }; // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/SynchronizableAccess.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/SynchronizableAccess.cpp index 97b98389..c107192d 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/SynchronizableAccess.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/SharedItems/SynchronizableAccess.cpp @@ -6,7 +6,8 @@ namespace worklets { void SynchronizableAccess::getBlockingBefore() { std::unique_lock lock(accessLock_); queue_.wait(lock, [this]() { - return !blockingWriter_ /* && dirtyWriters_ == 0 */ && (!imperativelyLocked_ || imperativeOwner_ == pthread_self()); + return !blockingWriter_ /* && dirtyWriters_ == 0 */ && + (!imperativelyLocked_ || imperativeOwner_ == pthread_self()); }); blockingReaders_++; } @@ -43,7 +44,8 @@ void SynchronizableAccess::getBlockingAfter() { void SynchronizableAccess::setBlockingBefore() { std::unique_lock lock(accessLock_); queue_.wait(lock, [this]() { - return !blockingWriter_ && blockingReaders_ == 0 /* && dirtyWriters_ == 0 */ && + return !blockingWriter_ && + blockingReaders_ == 0 /* && dirtyWriters_ == 0 */ && (!imperativelyLocked_ || imperativeOwner_ == pthread_self()); }); blockingWriter_ = true; @@ -58,7 +60,8 @@ void SynchronizableAccess::setBlockingAfter() { void SynchronizableAccess::lock() { std::unique_lock lock(accessLock_); queue_.wait(lock, [this]() { - return !blockingWriter_ && blockingReaders_ == 0 /* && dirtyWriters_ == 0 */ && + return !blockingWriter_ && + blockingReaders_ == 0 /* && dirtyWriters_ == 0 */ && (!imperativelyLocked_ || imperativeOwner_ == pthread_self()); }); imperativelyLocked_ = true; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/Defs.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/Defs.h index 43516a66..fccf8f6f 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/Defs.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/Defs.h @@ -8,15 +8,3 @@ so we have to check if headers are available. #if __APPLE__ && __has_include() #define JS_RUNTIME_HERMES 1 #endif - -#if REACT_NATIVE_MINOR_VERSION >= 84 -#include -namespace worklets { -using JSBigStringBuffer = facebook::react::JSBigString; -} -#else -#include -namespace worklets { -using JSBigStringBuffer = facebook::react::BigStringBuffer; -} -#endif // REACT_NATIVE_MINOR_VERSION >= 84 diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/FeatureFlags.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/FeatureFlags.cpp index 74fcaa1c..f5fe837d 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/FeatureFlags.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/FeatureFlags.cpp @@ -1,8 +1,5 @@ #include -#include -#include - namespace worklets { std::unordered_map DynamicFeatureFlags::flags_; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.cpp index b4c6fa5a..2669e47a 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.cpp @@ -1,11 +1,8 @@ #include #include - #include #include -#include -#include namespace worklets { @@ -63,23 +60,39 @@ const std::vector SUPPORTED_REFLECTION_TYPES = { "Proxy", }; -static inline std::string getObjectTypeName(jsi::Runtime &rt, const jsi::Object &object) { - return object.getPropertyAsObject(rt, "constructor").getProperty(rt, "name").toString(rt).utf8(rt); +static inline std::string getObjectTypeName( + jsi::Runtime &rt, + const jsi::Object &object) { + return object.getPropertyAsObject(rt, "constructor") + .getProperty(rt, "name") + .toString(rt) + .utf8(rt); } -static inline bool isInstanceOf(jsi::Runtime &rt, const jsi::Object &object, const std::string &type) { +static inline bool isInstanceOf( + jsi::Runtime &rt, + const jsi::Object &object, + const std::string &type) { return getObjectTypeName(rt, object) == type; } -static inline bool -isInstanceOfAny(jsi::Runtime &rt, const jsi::Object &object, const std::vector &supportedTypes) { +static inline bool isInstanceOfAny( + jsi::Runtime &rt, + const jsi::Object &object, + const std::vector &supportedTypes) { auto instanceType = getObjectTypeName(rt, object); - return std::find(supportedTypes.begin(), supportedTypes.end(), instanceType) != supportedTypes.end(); + return std::find( + supportedTypes.begin(), supportedTypes.end(), instanceType) != + supportedTypes.end(); } JSISerializer::JSISerializer(jsi::Runtime &rt) - : rt_(rt), visitedNodes_(rt_.global().getPropertyAsFunction(rt_, "Set").callAsConstructor(rt_).asObject(rt_)) {} + : rt_(rt), + visitedNodes_(rt_.global() + .getPropertyAsFunction(rt_, "Set") + .callAsConstructor(rt_) + .asObject(rt_)) {} std::string JSISerializer::stringifyWithName(const jsi::Object &object) { std::stringstream ss; @@ -117,7 +130,8 @@ std::string JSISerializer::stringifyFunction(const jsi::Function &func) { std::string JSISerializer::stringifyHostObject(jsi::HostObject &hostObject) { int status = -1; - char *hostObjClassName = abi::__cxa_demangle(typeid(hostObject).name(), NULL, NULL, &status); + char *hostObjClassName = + abi::__cxa_demangle(typeid(hostObject).name(), NULL, NULL, &status); if (status != 0) { return "[jsi::HostObject]"; } @@ -135,7 +149,8 @@ std::string JSISerializer::stringifyHostObject(jsi::HostObject &hostObject) { for (const auto &key : props) { auto formattedKey = key.utf8(rt_); auto value = hostObject.get(rt_, key); - ss << '"' << formattedKey << '"' << ": " << stringifyJSIValueRecursively(value); + ss << '"' << formattedKey << '"' << ": " + << stringifyJSIValueRecursively(value); if (formattedKey != lastKey) { ss << ", "; } @@ -155,7 +170,8 @@ std::string JSISerializer::stringifyObject(const jsi::Object &object) { for (size_t i = 0, propsCount = props.size(rt_); i < propsCount; i++) { jsi::String propName = props.getValueAtIndex(rt_, i).toString(rt_); - ss << '"' << propName.utf8(rt_) << '"' << ": " << stringifyJSIValueRecursively(object.getProperty(rt_, propName)); + ss << '"' << propName.utf8(rt_) << '"' << ": " + << stringifyJSIValueRecursively(object.getProperty(rt_, propName)); if (i != propsCount - 1) { ss << ", "; } @@ -175,7 +191,9 @@ std::string JSISerializer::stringifyError(const jsi::Object &object) { std::string JSISerializer::stringifySet(const jsi::Object &object) { std::stringstream ss; - jsi::Function arrayFrom = rt_.global().getPropertyAsObject(rt_, "Array").getPropertyAsFunction(rt_, "from"); + jsi::Function arrayFrom = rt_.global() + .getPropertyAsObject(rt_, "Array") + .getPropertyAsFunction(rt_, "from"); jsi::Object result = arrayFrom.call(rt_, object).asObject(rt_); if (!result.isArray(rt_)) { @@ -199,7 +217,9 @@ std::string JSISerializer::stringifySet(const jsi::Object &object) { std::string JSISerializer::stringifyMap(const jsi::Object &object) { std::stringstream ss; - jsi::Function arrayFrom = rt_.global().getPropertyAsObject(rt_, "Array").getPropertyAsFunction(rt_, "from"); + jsi::Function arrayFrom = rt_.global() + .getPropertyAsObject(rt_, "Array") + .getPropertyAsFunction(rt_, "from"); jsi::Object result = arrayFrom.call(rt_, object).asObject(rt_); if (!result.isArray(rt_)) { @@ -213,7 +233,8 @@ std::string JSISerializer::stringifyMap(const jsi::Object &object) { auto pair = arr.getValueAtIndex(rt_, i).asObject(rt_).getArray(rt_); auto key = pair.getValueAtIndex(rt_, 0); auto value = pair.getValueAtIndex(rt_, 1); - ss << stringifyJSIValueRecursively(key) << ": " << stringifyJSIValueRecursively(value); + ss << stringifyJSIValueRecursively(key) << ": " + << stringifyJSIValueRecursively(value); if (i != length - 1) { ss << ", "; } @@ -237,15 +258,21 @@ std::string JSISerializer::stringifyRecursiveType(const jsi::Object &object) { } std::string JSISerializer::stringifyWithToString(const jsi::Object &object) { - return object.getPropertyAsFunction(rt_, "toString").callWithThis(rt_, object).toString(rt_).utf8(rt_); + return object.getPropertyAsFunction(rt_, "toString") + .callWithThis(rt_, object) + .toString(rt_) + .utf8(rt_); } -std::string JSISerializer::stringifyJSIValueRecursively(const jsi::Value &value, bool isTopLevel) { +std::string JSISerializer::stringifyJSIValueRecursively( + const jsi::Value &value, + bool isTopLevel) { if (value.isBool() || value.isNumber()) { return value.toString(rt_).utf8(rt_); } if (value.isString()) { - return isTopLevel ? value.getString(rt_).utf8(rt_) : '"' + value.getString(rt_).utf8(rt_) + '"'; + return isTopLevel ? value.getString(rt_).utf8(rt_) + : '"' + value.getString(rt_).utf8(rt_) + '"'; } if (value.isSymbol()) { return value.getSymbol(rt_).toString(rt_); @@ -283,12 +310,15 @@ std::string JSISerializer::stringifyJSIValueRecursively(const jsi::Value &value, isInstanceOfAny(rt_, object, SUPPORTED_STRUCTURED_DATA_TYPES) || isInstanceOfAny(rt_, object, SUPPORTED_MANAGING_MEMORY_TYPES) || isInstanceOfAny(rt_, object, SUPPORTED_ABSTRACTION_OBJECT_TYPES) || - isInstanceOfAny(rt_, object, SUPPORTED_REFLECTION_TYPES) || isInstanceOf(rt_, object, "Intl") || - isInstanceOf(rt_, object, "WeakMap") || isInstanceOf(rt_, object, "WeakSet")) { + isInstanceOfAny(rt_, object, SUPPORTED_REFLECTION_TYPES) || + isInstanceOf(rt_, object, "Intl") || + isInstanceOf(rt_, object, "WeakMap") || + isInstanceOf(rt_, object, "WeakSet")) { // TODO: Consider extending this log info return stringifyWithName(object); } - if (isInstanceOf(rt_, object, "Date") || isInstanceOf(rt_, object, "RegExp")) { + if (isInstanceOf(rt_, object, "Date") || + isInstanceOf(rt_, object, "RegExp")) { return stringifyWithToString(object); } if (isInstanceOf(rt_, object, "Map")) { diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.h index 1c5288a1..55b509c6 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSISerializer.h @@ -11,7 +11,9 @@ namespace worklets { class JSISerializer { public: explicit JSISerializer(jsi::Runtime &rt); - std::string stringifyJSIValueRecursively(const jsi::Value &value, bool isTopLevel = false); + std::string stringifyJSIValueRecursively( + const jsi::Value &value, + bool isTopLevel = false); private: std::string stringifyArray(const jsi::Array &arr); @@ -26,11 +28,14 @@ class JSISerializer { std::string stringifyRecursiveType(const jsi::Object &object); bool hasBeenVisited(const jsi::Object &object) { - return visitedNodes_.getPropertyAsFunction(rt_, "has").callWithThis(rt_, visitedNodes_, object).getBool(); + return visitedNodes_.getPropertyAsFunction(rt_, "has") + .callWithThis(rt_, visitedNodes_, object) + .getBool(); } void markAsVisited(const jsi::Object &object) { - visitedNodes_.getPropertyAsFunction(rt_, "add").callWithThis(rt_, visitedNodes_, object); + visitedNodes_.getPropertyAsFunction(rt_, "add") + .callWithThis(rt_, visitedNodes_, object); } jsi::Runtime &rt_; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.cpp index 2d98e9b2..b3b8ee3b 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.cpp @@ -1,7 +1,6 @@ #include #include -#include #include namespace worklets { @@ -20,7 +19,8 @@ void JSLogger::reportFatalErrorOnJS( const std::shared_ptr &jsScheduler, JSErrorData &&jsErrorData, bool force) { - auto job = [jsErrorData = std::move(jsErrorData), force](jsi::Runtime &rnRuntime) { + auto job = [jsErrorData = std::move(jsErrorData), + force](jsi::Runtime &rnRuntime) { reportFatalErrorOnJS(rnRuntime, jsErrorData, force); }; if (jsScheduler->canInvokeSyncOnJS()) { @@ -30,20 +30,38 @@ void JSLogger::reportFatalErrorOnJS( } } -void JSLogger::reportFatalErrorOnJS(jsi::Runtime &rnRuntime, const JSErrorData &jsErrorData, bool force) { +void JSLogger::reportFatalErrorOnJS( + jsi::Runtime &rnRuntime, + const JSErrorData &jsErrorData, + bool force) { const auto &global = rnRuntime.global(); - const auto errorInstance = - rnRuntime.global().getPropertyAsFunction(rnRuntime, "Error").callAsConstructor(rnRuntime).asObject(rnRuntime); + const auto errorInstance = rnRuntime.global() + .getPropertyAsFunction(rnRuntime, "Error") + .callAsConstructor(rnRuntime) + .asObject(rnRuntime); - errorInstance.setProperty(rnRuntime, "message", jsi::String::createFromUtf8(rnRuntime, jsErrorData.message)); + errorInstance.setProperty( + rnRuntime, + "message", + jsi::String::createFromUtf8(rnRuntime, jsErrorData.message)); - errorInstance.setProperty(rnRuntime, "stack", jsi::String::createFromUtf8(rnRuntime, jsErrorData.stack)); + errorInstance.setProperty( + rnRuntime, + "stack", + jsi::String::createFromUtf8(rnRuntime, jsErrorData.stack)); - errorInstance.setProperty(rnRuntime, "name", jsi::String::createFromUtf8(rnRuntime, jsErrorData.name)); + errorInstance.setProperty( + rnRuntime, + "name", + jsi::String::createFromUtf8(rnRuntime, jsErrorData.name)); - errorInstance.setProperty(rnRuntime, "jsEngine", jsi::String::createFromUtf8(rnRuntime, jsErrorData.jsEngine)); + errorInstance.setProperty( + rnRuntime, + "jsEngine", + jsi::String::createFromUtf8(rnRuntime, jsErrorData.jsEngine)); - const auto &reportFatalErrorFunction = global.getPropertyAsFunction(rnRuntime, "__reportFatalRemoteError"); + const auto &reportFatalErrorFunction = + global.getPropertyAsFunction(rnRuntime, "__reportFatalRemoteError"); reportFatalErrorFunction.call(rnRuntime, errorInstance, force); } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.h index 08c586a5..9a420ead 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSLogger.h @@ -16,14 +16,20 @@ struct JSErrorData { class JSLogger { public: - explicit JSLogger(const std::shared_ptr &jsScheduler) : jsScheduler_(jsScheduler) {} + explicit JSLogger(const std::shared_ptr &jsScheduler) + : jsScheduler_(jsScheduler) {} void warnOnJS(const std::string &warning) const; - static void - reportFatalErrorOnJS(const std::shared_ptr &jsScheduler, JSErrorData &&jsErrorData, bool force = false); + static void reportFatalErrorOnJS( + const std::shared_ptr &jsScheduler, + JSErrorData &&jsErrorData, + bool force = false); private: - static void reportFatalErrorOnJS(jsi::Runtime &rnRuntime, const JSErrorData &jsErrorData, bool force = false); + static void reportFatalErrorOnJS( + jsi::Runtime &rnRuntime, + const JSErrorData &jsErrorData, + bool force = false); const std::shared_ptr jsScheduler_; }; diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.cpp index 43c80519..2641f9e7 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.cpp @@ -6,15 +6,18 @@ namespace worklets { void JSScheduler::scheduleOnJS(Job job) { - jsCallInvoker_->invokeAsync([job = std::move(job), &rt = rnRuntime_] { job(rt); }); + jsCallInvoker_->invokeAsync( + [job = std::move(job), &rt = rnRuntime_] { job(rt); }); } bool JSScheduler::canInvokeSyncOnJS() { return isJavaScriptQueue_(); } -void JSScheduler::invokeSyncOnJS(const Job &job) { - react_native_assert(canInvokeSyncOnJS() && "JSScheduler::invokeSyncOnJS should only be called from the JS thread"); +void JSScheduler::invokeSyncOnJS(Job job) { + react_native_assert( + canInvokeSyncOnJS() && + "JSScheduler::invokeSyncOnJS should only be called from the JS thread"); job(rnRuntime_); } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.h index 6a7ac992..a03493f8 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/JSScheduler.h @@ -18,11 +18,13 @@ class JSScheduler { jsi::Runtime &rnRuntime, const std::shared_ptr &jsCallInvoker, std::function &&isJavaScriptQueue) - : rnRuntime_(rnRuntime), jsCallInvoker_(jsCallInvoker), isJavaScriptQueue_(isJavaScriptQueue) {} + : rnRuntime_(rnRuntime), + jsCallInvoker_(jsCallInvoker), + isJavaScriptQueue_(isJavaScriptQueue) {} void scheduleOnJS(std::function job); - void invokeSyncOnJS(const std::function &job); + void invokeSyncOnJS(std::function job); bool canInvokeSyncOnJS(); diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/SingleInstanceChecker.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/SingleInstanceChecker.h index 4a2fde82..6017613b 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/SingleInstanceChecker.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/SingleInstanceChecker.h @@ -28,7 +28,7 @@ class SingleInstanceChecker { ~SingleInstanceChecker(); private: - void assertWithMessage(bool condition, const std::string &message) { + void assertWithMessage(bool condition, std::string message) { if (!condition) { #ifdef ANDROID __android_log_print(ANDROID_LOG_WARN, "Worklets", "%s", message.c_str()); @@ -50,7 +50,8 @@ class SingleInstanceChecker { template SingleInstanceChecker::SingleInstanceChecker() { int status = 0; - std::string className = __cxxabiv1::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status); + std::string className = + __cxxabiv1::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status); // React Native can spawn up to two instances of a Native Module at the same // time. This happens during a reload when a new instance of React Native is diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/VersionUtils.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/VersionUtils.cpp index 41ced947..2f7a032c 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/VersionUtils.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/VersionUtils.cpp @@ -1,9 +1,7 @@ #include #include -#include #include -#include using namespace facebook; @@ -11,7 +9,8 @@ namespace worklets { bool matchVersion(const std::string &version1, const std::string &version2) { std::regex pattern("^\\d+\\.\\d+\\.\\d+$"); - if (std::regex_match(version1, pattern) && std::regex_match(version2, pattern)) { + if (std::regex_match(version1, pattern) && + std::regex_match(version2, pattern)) { auto majorPattern = std::regex("^\\d+"); std::smatch major1; std::smatch major2; @@ -64,7 +63,8 @@ void checkJSVersion( libraryPrefix + "Mismatch between C++ code version and " "JavaScript code version (") + - cppVersion + " vs. " + jsVersion + " respectively).\n" + "See " + docsBaseUrl + + cppVersion + " vs. " + jsVersion + " respectively).\n" + "See " + + docsBaseUrl + "/guides/" "troubleshooting#mismatch-between-c-code-version-and-javascript-code-" "version` for more details."); diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletEventHandler.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletEventHandler.cpp index 74019774..50258455 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletEventHandler.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletEventHandler.cpp @@ -1,15 +1,13 @@ #include -#include -#include - namespace worklets { void WorkletEventHandler::process( const std::shared_ptr &workletRuntime, const double eventTimestamp, const jsi::Value &eventValue) const { - workletRuntime->runSync(handlerFunction_, jsi::Value(eventTimestamp), eventValue); + workletRuntime->runGuarded( + handlerFunction_, jsi::Value(eventTimestamp), eventValue); } uint64_t WorkletEventHandler::getHandlerId() const { diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp index 1f64e794..0afe87b2 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.cpp @@ -4,14 +4,16 @@ #include #include -#include #include using namespace facebook; namespace worklets::jsi_utils { -jsi::Array convertStringToArray(jsi::Runtime &rt, const std::string &value, const unsigned int expectedSize) { +jsi::Array convertStringToArray( + jsi::Runtime &rt, + const std::string &value, + const unsigned int expectedSize) { std::vector transformMatrixList; std::istringstream stringStream(value); std::copy( @@ -19,7 +21,8 @@ jsi::Array convertStringToArray(jsi::Runtime &rt, const std::string &value, cons std::istream_iterator(), std::back_inserter(transformMatrixList)); react_native_assert( - transformMatrixList.size() == expectedSize && "Transform matrix list size is different than expected"); + transformMatrixList.size() == expectedSize && + "Transform matrix list size is different than expected"); jsi::Array matrix(rt, expectedSize); for (unsigned int i = 0; i < expectedSize; i++) { matrix.setValueAtIndex(rt, i, transformMatrixList[i]); @@ -27,10 +30,13 @@ jsi::Array convertStringToArray(jsi::Runtime &rt, const std::string &value, cons return matrix; } -jsi::Object optimizedFromHostObject(jsi::Runtime &rt, std::shared_ptr &&hostObject) { +jsi::Object optimizedFromHostObject( + jsi::Runtime &rt, + std::shared_ptr &&hostObject) { auto optimizedObject = jsi::Object(rt); for (const auto &propertyName : hostObject->getPropertyNames(rt)) { - optimizedObject.setProperty(rt, propertyName, hostObject->get(rt, propertyName)); + optimizedObject.setProperty( + rt, propertyName, hostObject->get(rt, propertyName)); } return optimizedObject; } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.h index 975819a7..6d0b1d70 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsJSIUtils.h @@ -40,7 +40,9 @@ inline jsi::Object get(jsi::Runtime &rt, const jsi::Value *value) { } template <> -inline jsi::Value const &get(jsi::Runtime &, const jsi::Value *value) { +inline jsi::Value const &get( + jsi::Runtime &, + const jsi::Value *value) { return *value; } @@ -55,7 +57,9 @@ inline jsi::Value const &get(jsi::Runtime &, const jsi::Valu // BEGIN implementations for `convertArgs` specializations. // specialization for empty `Targs` - returns an empty tuple template -inline std::enable_if_t<(sizeof...(Args) == 0), std::tuple<>> convertArgs(jsi::Runtime &, const jsi::Value *) { +inline std::enable_if_t<(sizeof...(Args) == 0), std::tuple<>> convertArgs( + jsi::Runtime &, + const jsi::Value *) { return std::make_tuple(); } @@ -63,7 +67,9 @@ inline std::enable_if_t<(sizeof...(Args) == 0), std::tuple<>> convertArgs(jsi::R // then calls recursively on the rest of `args` // and returns the concatenation of results template -inline std::tuple convertArgs(jsi::Runtime &rt, const jsi::Value *args) { +inline std::tuple convertArgs( + jsi::Runtime &rt, + const jsi::Value *args) { auto arg = std::tuple(get(rt, args)); auto rest = convertArgs(rt, std::next(args)); return std::tuple_cat(std::move(arg), std::move(rest)); @@ -73,9 +79,14 @@ inline std::tuple convertArgs(jsi::Runtime &rt, const jsi::Value *ar // returns a tuple with the result of casting `args` to appropriate // native C++ types needed to call `function` template -std::tuple -getArgsForFunction(std::function, jsi::Runtime &rt, const jsi::Value *args, const size_t count) { - react_native_assert(sizeof...(Args) == count && "Argument list has different length than expected"); +std::tuple getArgsForFunction( + std::function, + jsi::Runtime &rt, + const jsi::Value *args, + const size_t count) { + react_native_assert( + sizeof...(Args) == count && + "Argument list has different length than expected"); return convertArgs(rt, args); } @@ -88,27 +99,36 @@ std::tuple getArgsForFunction( jsi::Runtime &rt, const jsi::Value *args, const size_t count) { - react_native_assert(sizeof...(Args) == count && "Argument list has different length than expected"); + react_native_assert( + sizeof...(Args) == count && + "Argument list has different length than expected"); return std::tuple_cat(std::tie(rt), convertArgs(rt, args)); } // calls `function` with `args` template -inline jsi::Value apply(std::function function, std::tuple args) { +inline jsi::Value apply( + std::function function, + std::tuple args) { return std::apply(function, std::move(args)); } // calls string-returning `function` with `args`, // and returns the string template -inline jsi::Value apply(jsi::Runtime &rt, std::function function, std::tuple args) { +inline jsi::Value apply( + jsi::Runtime &rt, + std::function function, + std::tuple args) { return jsi::String::createFromUtf8(rt, std::apply(function, std::move(args))); } // calls void-returning `function` with `args`, // and returns `undefined` template -inline jsi::Value apply(std::function function, std::tuple args) { +inline jsi::Value apply( + std::function function, + std::tuple args) { std::apply(function, std::move(args)); return jsi::Value::undefined(); } @@ -117,7 +137,11 @@ inline jsi::Value apply(std::function function, std::tuple jsi::HostFunctionType createHostFunction(Fun function) { - return [function](jsi::Runtime &rt, const jsi::Value &, const jsi::Value *args, const size_t count) { + return [function]( + jsi::Runtime &rt, + const jsi::Value &, + const jsi::Value *args, + const size_t count) { auto argz = getArgsForFunction(function, rt, args, count); return apply(function, std::move(argz)); }; @@ -126,8 +150,13 @@ jsi::HostFunctionType createHostFunction(Fun function) { // returns a function with JSI calling convention // from a native function `function` returning a string template -jsi::HostFunctionType createHostFunction(std::function function) { - return [function](jsi::Runtime &rt, const jsi::Value &, const jsi::Value *args, const size_t count) { +jsi::HostFunctionType createHostFunction( + std::function function) { + return [function]( + jsi::Runtime &rt, + const jsi::Value &, + const jsi::Value *args, + const size_t count) { auto argz = getArgsForFunction(function, rt, args, count); return apply(rt, function, std::move(argz)); }; @@ -150,11 +179,14 @@ struct takes_runtime { // and installs it as a global function named `name` // in the `rt` JS runtime template -void installJsiFunction(jsi::Runtime &rt, std::string_view name, std::function function) { +void installJsiFunction( + jsi::Runtime &rt, + std::string_view name, + std::function function) { auto clb = createHostFunction(function); auto argsCount = sizeof...(Args) - takes_runtime::value; - jsi::Value jsiFunction = - jsi::Function::createFromHostFunction(rt, jsi::PropNameID::forAscii(rt, name.data()), argsCount, clb); + jsi::Value jsiFunction = jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forAscii(rt, name.data()), argsCount, clb); rt.global().setProperty(rt, name.data(), jsiFunction); } @@ -164,8 +196,13 @@ void installJsiFunction(jsi::Runtime &rt, std::string_view name, Fun function) { installJsiFunction(rt, name, std::function(std::forward(function))); } -jsi::Array convertStringToArray(jsi::Runtime &rt, const std::string &value, const unsigned int expectedSize); +jsi::Array convertStringToArray( + jsi::Runtime &rt, + const std::string &value, + const unsigned int expectedSize); -jsi::Object optimizedFromHostObject(jsi::Runtime &rt, std::shared_ptr &&hostObject); +jsi::Object optimizedFromHostObject( + jsi::Runtime &rt, + std::shared_ptr &&hostObject); } // namespace worklets::jsi_utils diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsSystraceSection.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsSystraceSection.h index 97b7dec2..a66764b4 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsSystraceSection.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsSystraceSection.h @@ -31,7 +31,9 @@ namespace worklets { struct WorkletsSystraceSection { public: template - explicit WorkletsSystraceSection(const char *name, ConvertsToStringPiece &&...args) { + explicit WorkletsSystraceSection( + const char *name, + ConvertsToStringPiece &&...args) { ATrace_beginSection(name); } @@ -43,7 +45,8 @@ struct WorkletsSystraceSection { // The apple part is copied from React Native // from // https://github.com/facebook/react-native/blob/5697d923a05119314b4cfcd556cb243986637764/packages/react-native/ReactCommon/cxxreact/SystraceSection.h -#elif defined(__APPLE__) && OS_LOG_TARGET_HAS_10_15_FEATURES && defined(WORKLETS_PROFILING) +#elif defined(__APPLE__) && OS_LOG_TARGET_HAS_10_15_FEATURES && \ + defined(WORKLETS_PROFILING) template struct renderer { @@ -55,7 +58,8 @@ struct renderer { }; template -static auto render(const T &t) -> decltype(renderer::render(std::declval())) { +static auto render(const T &t) + -> decltype(renderer::render(std::declval())) { return renderer::render(t); } @@ -63,7 +67,8 @@ inline os_log_t instrumentsLogHandle = nullptr; static inline os_log_t getOrCreateInstrumentsLogHandle() { if (!instrumentsLogHandle) { - instrumentsLogHandle = os_log_create("dev.worklets.instruments", OS_LOG_CATEGORY_POINTS_OF_INTEREST); + instrumentsLogHandle = os_log_create( + "dev.worklets.instruments", OS_LOG_CATEGORY_POINTS_OF_INTEREST); } return instrumentsLogHandle; } @@ -71,7 +76,9 @@ static inline os_log_t getOrCreateInstrumentsLogHandle() { struct WorkletsSystraceSection { public: template - explicit WorkletsSystraceSection(const char *name, ConvertsToStringPiece &&...args) { + explicit WorkletsSystraceSection( + const char *name, + ConvertsToStringPiece &&...args) { os_log_t instrumentsLogHandle = worklets::getOrCreateInstrumentsLogHandle(); // If the log isn't enabled, we don't want the performance overhead of the @@ -90,11 +97,22 @@ struct WorkletsSystraceSection { signpostID_ = os_signpost_id_make_with_pointer(instrumentsLogHandle, this); - os_signpost_interval_begin(instrumentsLogHandle, signpostID_, "Worklets", "%s begin: %s", name, argsString.c_str()); + os_signpost_interval_begin( + instrumentsLogHandle, + signpostID_, + "Worklets", + "%s begin: %s", + name, + argsString.c_str()); } ~WorkletsSystraceSection() { - os_signpost_interval_end(worklets::instrumentsLogHandle, signpostID_, "Worklets", "%s end", name_.data()); + os_signpost_interval_end( + worklets::instrumentsLogHandle, + signpostID_, + "Worklets", + "%s end", + name_.data()); } private: @@ -107,10 +125,12 @@ struct WorkletsSystraceSection { struct WorkletsSystraceSection { public: template - explicit WorkletsSystraceSection(const char *name, ConvertsToStringPiece &&...args) {} + explicit WorkletsSystraceSection( + const char *name, + ConvertsToStringPiece &&...args) {} }; -#endif // defined(__APPLE__) && OS_LOG_TARGET_HAS_10_15_FEATURES && \ - // defined(WORKLETS_PROFILING) +#endif // defined(__APPLE__) && OS_LOG_TARGET_HAS_10_15_FEATURES && + // defined(WORKLETS_PROFILING) } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.cpp index 16b50cee..77d5449a 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.cpp @@ -21,13 +21,19 @@ std::string getWorkletsCppVersion() { void injectWorkletsCppVersion(jsi::Runtime &rnRuntime) { auto version = getWorkletsCppVersion(); - rnRuntime.global().setProperty(rnRuntime, "_WORKLETS_VERSION_CPP", jsi::String::createFromUtf8(rnRuntime, version)); + rnRuntime.global().setProperty( + rnRuntime, + "_WORKLETS_VERSION_CPP", + jsi::String::createFromUtf8(rnRuntime, version)); } #ifndef NDEBUG -void checkJSVersion(jsi::Runtime &rnRuntime, const std::shared_ptr &jsLogger) { +void checkJSVersion( + jsi::Runtime &rnRuntime, + const std::shared_ptr &jsLogger) { auto cppVersion = getWorkletsCppVersion(); - auto jsVersionValue = rnRuntime.global().getProperty(rnRuntime, "_WORKLETS_VERSION_JS"); + auto jsVersionValue = + rnRuntime.global().getProperty(rnRuntime, "_WORKLETS_VERSION_JS"); worklets::checkJSVersion( rnRuntime, jsVersionValue, @@ -37,7 +43,9 @@ void checkJSVersion(jsi::Runtime &rnRuntime, const std::shared_ptr &jsLogger) { +void checkJSVersion( + jsi::Runtime &rnRuntime, + const std::shared_ptr &jsLogger) { // In release builds we don't check the version, hence // this function is a NOOP. } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.h index 62d35d22..832842ec 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/Tools/WorkletsVersion.h @@ -13,6 +13,8 @@ namespace worklets { std::string getWorkletsCppVersion(); void injectWorkletsCppVersion(jsi::Runtime &); -void checkJSVersion(jsi::Runtime &, const std::shared_ptr &); +void checkJSVersion( + jsi::Runtime &, + const std::shared_ptr &); }; // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp index b201be74..52b7ec3f 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp @@ -1,10 +1,9 @@ -#include #include #include #include #include - #include + #include namespace worklets { @@ -13,7 +12,10 @@ void RNRuntimeWorkletDecorator::decorate( jsi::Runtime &rnRuntime, jsi::Object &&jsiWorkletsModuleProxy, const std::shared_ptr &jsLogger) { - rnRuntime.global().setProperty(rnRuntime, runtimeKindBindingName, static_cast(RuntimeKind::ReactNative)); + rnRuntime.global().setProperty( + rnRuntime, + runtimeKindBindingName, + static_cast(RuntimeKind::ReactNative)); rnRuntime.global().setProperty(rnRuntime, "_WORKLET", false); @@ -21,7 +23,8 @@ void RNRuntimeWorkletDecorator::decorate( // react-native-screens 4.9.0 depends on it rnRuntime.global().setProperty(rnRuntime, "_IS_FABRIC", true); - rnRuntime.global().setProperty(rnRuntime, "__workletsModuleProxy", std::move(jsiWorkletsModuleProxy)); + rnRuntime.global().setProperty( + rnRuntime, "__workletsModuleProxy", std::move(jsiWorkletsModuleProxy)); WorkletRuntimeCollector::install(rnRuntime); @@ -29,19 +32,7 @@ void RNRuntimeWorkletDecorator::decorate( checkJSVersion(rnRuntime, jsLogger); #endif // NDEBUG -#ifdef IS_REANIMATED_EXAMPLE_APP - installDebugBindings(rnRuntime); -#endif // IS_REANIMATED_EXAMPLE_APP - injectWorkletsCppVersion(rnRuntime); } -#ifdef IS_REANIMATED_EXAMPLE_APP -void RNRuntimeWorkletDecorator::installDebugBindings(jsi::Runtime &rnRuntime) { - jsi_utils::installJsiFunction(rnRuntime, "__hasNativeState", [](jsi::Runtime &rt, const jsi::Value &value) { - return jsi::Value(value.isObject() && value.asObject(rt).hasNativeState(rt)); - }); -} -#endif // IS_REANIMATED_EXAMPLE_APP - } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h index 8acbeed0..a851f6b7 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h @@ -12,13 +12,10 @@ namespace worklets { class RNRuntimeWorkletDecorator { // TODO: Rename to `RNRuntimeWorkletsDecorator` or something more suitable. public: - static void - decorate(jsi::Runtime &rnRuntime, jsi::Object &&jsiWorkletsModuleProxy, const std::shared_ptr &jsLogger); - -#ifdef IS_REANIMATED_EXAMPLE_APP - private: - static void installDebugBindings(jsi::Runtime &rnRuntime); -#endif // IS_REANIMATED_EXAMPLE_APP + static void decorate( + jsi::Runtime &rnRuntime, + jsi::Object &&jsiWorkletsModuleProxy, + const std::shared_ptr &jsLogger); }; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeBindings.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeBindings.h deleted file mode 100644 index 688487eb..00000000 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeBindings.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include - -#include - -using namespace facebook; - -namespace worklets { - -struct RuntimeBindings { - using RequestAnimationFrame = std::function)>; - - const RequestAnimationFrame requestAnimationFrame; -}; - -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.cpp index 55a50765..c2e9fe3c 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.cpp @@ -1,11 +1,3 @@ #include -#include - -namespace worklets { -namespace RuntimeData { - const std::string uiRuntimeName{"UI"}; - -} // namespace RuntimeData -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.h index a4fce174..5efcf647 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeData.h @@ -1,23 +1,10 @@ #pragma once -#include #include -namespace worklets { -namespace RuntimeData { - /** * Unused, but kept for possible future use. */ constexpr uint64_t rnRuntimeId{0}; constexpr uint64_t uiRuntimeId{1}; extern const std::string uiRuntimeName; - -#if REACT_NATIVE_MINOR_VERSION >= 81 - -constexpr facebook::jsi::UUID weakRuntimeUUID{0x770c6f2e, 0x1e4d, 0x436a, 0xa2b1, 0x9f322c8d5f5e}; - -#endif // REACT_NATIVE_MINOR_VERSION >= 81 - -}; // namespace RuntimeData -} // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeHolder.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeHolder.h deleted file mode 100644 index 1e3f4439..00000000 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeHolder.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#if REACT_NATIVE_MINOR_VERSION >= 81 - -#include - -namespace worklets { - -class WorkletRuntime; - -/** - * Holds a weak reference to a WorkletRuntime instance. - * - * Used to link jsi::Runtime instances back to their WorkletRuntime holders - * without inducing reference cycles. - */ -struct WeakRuntimeHolder { - std::weak_ptr weakRuntime; -}; - -} // namespace worklets - -#endif // REACT_NATIVE_MINOR_VERSION >= 81 diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeKind.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeKind.h index 21777d9b..b2bdb825 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeKind.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeKind.h @@ -1,13 +1,11 @@ #pragma once -#include - namespace worklets { /** * Represents the different types of runtime environments available for * worklets. */ -enum class RuntimeKind : std::uint8_t { +enum class RuntimeKind { ReactNative = 1, UI = 2, Worker = 3, diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp index b9ba9dc6..08b1caf5 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.cpp @@ -1,10 +1,7 @@ #include #include -#include -#include #include -#include namespace worklets { @@ -16,6 +13,26 @@ std::shared_ptr RuntimeManager::getRuntime(uint64_t runtimeId) { return nullptr; } +std::shared_ptr RuntimeManager::getRuntime( + const std::string &name) { + std::shared_lock lock(weakRuntimesMutex_); + if (nameToRuntimeId_.contains(name)) { + return getRuntime(nameToRuntimeId_.at(name)); + } + return nullptr; +} + +#ifdef WORKLETS_BUNDLE_MODE +std::shared_ptr RuntimeManager::getRuntime( + jsi::Runtime *runtime) { + std::shared_lock lock(weakRuntimesMutex_); + if (runtimeAddressToRuntimeId_.contains(runtime)) { + return getRuntime(runtimeAddressToRuntimeId_.at(runtime)); + } + return nullptr; +} +#endif // WORKLETS_BUNDLE_MODE + std::vector> RuntimeManager::getAllRuntimes() { std::shared_lock lock(weakRuntimesMutex_); @@ -32,27 +49,28 @@ std::vector> RuntimeManager::getAllRuntimes() { } std::shared_ptr RuntimeManager::getUIRuntime() { - return getRuntime(RuntimeData::uiRuntimeId); + return getRuntime(uiRuntimeId); } std::shared_ptr RuntimeManager::createWorkletRuntime( std::shared_ptr jsiWorkletsModuleProxy, const std::string &name, - const std::shared_ptr &initializer, + std::shared_ptr initializer, const std::shared_ptr &queue, bool enableEventLoop) { const auto runtimeId = getNextRuntimeId(); const auto jsQueue = jsiWorkletsModuleProxy->getJSQueue(); - auto workletRuntime = std::make_shared(runtimeId, jsQueue, name, queue, enableEventLoop); + auto workletRuntime = std::make_shared( + runtimeId, jsQueue, name, queue, enableEventLoop); workletRuntime->init(std::move(jsiWorkletsModuleProxy)); if (initializer) { - workletRuntime->runSync(initializer); + workletRuntime->runGuarded(initializer); } - registerRuntime(runtimeId, workletRuntime); + registerRuntime(runtimeId, name, workletRuntime); return workletRuntime; } @@ -61,13 +79,9 @@ std::shared_ptr RuntimeManager::createUninitializedUIRuntime( const std::shared_ptr &jsQueue, const std::shared_ptr &uiAsyncQueue) { const auto uiRuntime = std::make_shared( - RuntimeData::uiRuntimeId, - jsQueue, - RuntimeData::uiRuntimeName, - uiAsyncQueue, - /*enableEventLoop*/ false); + uiRuntimeId, jsQueue, uiRuntimeName, uiAsyncQueue); - registerRuntime(RuntimeData::uiRuntimeId, uiRuntime); + registerRuntime(uiRuntimeId, uiRuntimeName, uiRuntime); return uiRuntime; } @@ -76,18 +90,16 @@ uint64_t RuntimeManager::getNextRuntimeId() { return nextRuntimeId_.fetch_add(1, std::memory_order_relaxed); } -void RuntimeManager::registerRuntime(const uint64_t runtimeId, const std::shared_ptr &workletRuntime) { - std::unique_lock registrationLock(registrationMutex_); +void RuntimeManager::registerRuntime( + const uint64_t runtimeId, + const std::string &name, + const std::shared_ptr &workletRuntime) { std::unique_lock lock(weakRuntimesMutex_); weakRuntimes_[runtimeId] = workletRuntime; -} - -void RuntimeManager::pause() { - registrationMutex_.lock(); -} - -void RuntimeManager::resume() { - registrationMutex_.unlock(); + nameToRuntimeId_[name] = runtimeId; +#ifdef WORKLETS_BUNDLE_MODE + runtimeAddressToRuntimeId_[&workletRuntime->getJSIRuntime()] = runtimeId; +#endif // WORKLETS_BUNDLE_MODE } } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h index af778476..c6c49371 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/RuntimeManager.h @@ -23,6 +23,10 @@ class JSIWorkletsModuleProxy; class RuntimeManager { public: std::shared_ptr getRuntime(uint64_t runtimeId); + std::shared_ptr getRuntime(const std::string &name); +#ifdef WORKLETS_BUNDLE_MODE + std::shared_ptr getRuntime(jsi::Runtime *runtime); +#endif // WORKLETS_BUNDLE_MODE std::vector> getAllRuntimes(); @@ -31,7 +35,7 @@ class RuntimeManager { std::shared_ptr createWorkletRuntime( std::shared_ptr jsiWorkletsModuleProxy, const std::string &name, - const std::shared_ptr &initializer = nullptr, + std::shared_ptr initializer = nullptr, const std::shared_ptr &queue = nullptr, bool enableEventLoop = true); @@ -39,21 +43,21 @@ class RuntimeManager { const std::shared_ptr &jsQueue, const std::shared_ptr &uiAsyncQueue); - /** Pauses registration of new Worklet Runtimes. */ - void pause(); - - /** Resumes registration of new Worklet Runtimes. */ - void resume(); - private: uint64_t getNextRuntimeId(); - void registerRuntime(const uint64_t runtimeId, const std::shared_ptr &workletRuntime); + void registerRuntime( + const uint64_t runtimeId, + const std::string &name, + const std::shared_ptr &workletRuntime); - std::atomic_uint64_t nextRuntimeId_{RuntimeData::uiRuntimeId + 1}; + std::atomic_uint64_t nextRuntimeId_{uiRuntimeId + 1}; std::map> weakRuntimes_; std::shared_mutex weakRuntimesMutex_; - std::mutex registrationMutex_; + std::map nameToRuntimeId_; +#ifdef WORKLETS_BUNDLE_MODE + std::map runtimeAddressToRuntimeId_; +#endif // WORKLETS_BUNDLE_MODE }; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp index 2337198d..0c0de55e 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.cpp @@ -8,12 +8,16 @@ namespace worklets { void UIRuntimeDecorator::decorate( facebook::jsi::Runtime &uiRuntime, - std::function &&requestAnimationFrame) { - uiRuntime.global().setProperty(uiRuntime, runtimeKindBindingName, static_cast(RuntimeKind::UI)); + std::function< + void(facebook::jsi::Runtime &rt, const facebook::jsi::Value &callback)> + &&requestAnimationFrame) { + uiRuntime.global().setProperty( + uiRuntime, runtimeKindBindingName, static_cast(RuntimeKind::UI)); uiRuntime.global().setProperty(uiRuntime, "_UI", true); - jsi_utils::installJsiFunction(uiRuntime, "requestAnimationFrame", std::move(requestAnimationFrame)); + jsi_utils::installJsiFunction( + uiRuntime, "requestAnimationFrame", std::move(requestAnimationFrame)); } } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h index 717d6c9a..b26e45ea 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/UIRuntimeDecorator.h @@ -8,7 +8,9 @@ class UIRuntimeDecorator { public: static void decorate( facebook::jsi::Runtime &uiRuntime, - std::function &&requestAnimationFrame); + std::function &&requestAnimationFrame); }; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp index 22388b6b..1ac9612a 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.cpp @@ -16,29 +16,25 @@ namespace worklets { using namespace facebook; using namespace react; -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#if HERMES_ENABLE_DEBUGGER using namespace facebook::hermes::inspector_modern; -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#endif // HERMES_ENABLE_DEBUGGER #if HERMES_ENABLE_DEBUGGER -class HermesExecutorRuntimeAdapter -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) - : public RuntimeAdapter -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) -{ +class HermesExecutorRuntimeAdapter : public RuntimeAdapter { public: explicit HermesExecutorRuntimeAdapter( facebook::hermes::HermesRuntime &hermesRuntime, const std::shared_ptr &thread) - : hermesRuntime_(hermesRuntime), thread_(thread) {} + : hermesRuntime_(hermesRuntime), thread_(std::move(thread)) {} virtual ~HermesExecutorRuntimeAdapter() { // This is required by iOS, because there is an assertion in the destructor // that the thread was indeed `quit` before thread_->quitSynchronous(); } -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) + facebook::hermes::HermesRuntime &getRuntime() override { return hermesRuntime_; } @@ -48,7 +44,6 @@ class HermesExecutorRuntimeAdapter // required us to hold a refernce to the runtime inside this adapter which // caused issues while reloading the app. void tickleJs() override {} -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) public: facebook::hermes::HermesRuntime &hermesRuntime_; @@ -61,11 +56,15 @@ WorkletHermesRuntime::WorkletHermesRuntime( std::unique_ptr runtime, const std::shared_ptr &jsQueue, const std::string &name) - : jsi::WithRuntimeDecorator(*runtime, reentrancyCheck_), runtime_(std::move(runtime)) { -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) - auto adapter = std::make_unique(*runtime_, jsQueue); + : jsi::WithRuntimeDecorator( + *runtime, + reentrancyCheck_), + runtime_(std::move(runtime)) { +#if HERMES_ENABLE_DEBUGGER + auto adapter = + std::make_unique(*runtime_, jsQueue); debugToken_ = chrome::enableDebugging(std::move(adapter), name); -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#endif // HERMES_ENABLE_DEBUGGER #ifndef NDEBUG facebook::hermes::HermesRuntime *wrappedRuntime = runtime_.get(); @@ -74,27 +73,34 @@ WorkletHermesRuntime::WorkletHermesRuntime( jsi::PropNameID::forAscii(*runtime_, "evalWithSourceMap"), 3, [wrappedRuntime]( - jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value { - auto code = std::make_shared(args[0].asString(rt).utf8(rt)); + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) -> jsi::Value { + auto code = std::make_shared( + args[0].asString(rt).utf8(rt)); std::string sourceURL; if (count > 1 && args[1].isString()) { sourceURL = args[1].asString(rt).utf8(rt); } std::shared_ptr sourceMap; if (count > 2 && args[2].isString()) { - sourceMap = std::make_shared(args[2].asString(rt).utf8(rt)); + sourceMap = std::make_shared( + args[2].asString(rt).utf8(rt)); } - return wrappedRuntime->evaluateJavaScriptWithSourceMap(code, sourceMap, sourceURL); + return wrappedRuntime->evaluateJavaScriptWithSourceMap( + code, sourceMap, sourceURL); }); - runtime_->global().setProperty(*runtime_, "evalWithSourceMap", evalWithSourceMap); + runtime_->global().setProperty( + *runtime_, "evalWithSourceMap", evalWithSourceMap); #endif // NDEBUG } WorkletHermesRuntime::~WorkletHermesRuntime() { -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#if HERMES_ENABLE_DEBUGGER // We have to disable debugging before the runtime is destroyed. chrome::disableDebugging(debugToken_); -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#endif // HERMES_ENABLE_DEBUGGER } } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h index 199327ef..de4301c8 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletHermesRuntime.h @@ -17,17 +17,17 @@ #include #include -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#if HERMES_ENABLE_DEBUGGER #include -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#endif // HERMES_ENABLE_DEBUGGER namespace worklets { using namespace facebook; using namespace react; -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#if HERMES_ENABLE_DEBUGGER using namespace facebook::hermes::inspector_modern; -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#endif // HERMES_ENABLE_DEBUGGER // ReentrancyCheck is copied from React Native // from ReactCommon/hermes/executor/HermesExecutorFactory.cpp @@ -57,17 +57,20 @@ struct WorkletsReentrancyCheck { // of this sort would be surprising, because the decorator would // need to call after() without before(). - if (tid.compare_exchange_strong(expected, this_id, std::memory_order_relaxed)) { + if (tid.compare_exchange_strong( + expected, this_id, std::memory_order_relaxed)) { // Returns true if tid and expected were the same. If they // were, then the stored tid referred to no thread, and we // atomically saved this thread's tid. Now increment depth. - react_native_assert(depth == 0 && "[Worklets] No thread id, but depth != 0"); + react_native_assert( + depth == 0 && "[Worklets] No thread id, but depth != 0"); ++depth; } else if (expected == this_id) { // If the stored tid referred to a thread, expected was set to // that value. If that value is this thread's tid, that's ok, // just increment depth again. - react_native_assert(depth != 0 && "[Worklets] Thread id was set, but depth == 0"); + react_native_assert( + depth != 0 && "[Worklets] Thread id was set, but depth == 0"); ++depth; } else { // The stored tid was some other thread. This indicates a bad @@ -80,12 +83,15 @@ struct WorkletsReentrancyCheck { void after() { react_native_assert( - tid.load(std::memory_order_relaxed) == std::this_thread::get_id() && "[Worklets] No thread id in after()"); + tid.load(std::memory_order_relaxed) == std::this_thread::get_id() && + "[Worklets] No thread id in after()"); if (--depth == 0) { // If we decremented depth to zero, store no-thread into tid. std::thread::id expected = std::this_thread::get_id(); - bool didWrite = tid.compare_exchange_strong(expected, std::thread::id(), std::memory_order_relaxed); - react_native_assert(didWrite && "[Worklets] Decremented to zero, but no tid write"); + bool didWrite = tid.compare_exchange_strong( + expected, std::thread::id(), std::memory_order_relaxed); + react_native_assert( + didWrite && "[Worklets] Decremented to zero, but no tid write"); } } @@ -103,20 +109,21 @@ struct WorkletsReentrancyCheck { // WithRuntimeDecorator -> DecoratedRuntime -> jsi::Runtime You can find out // more about this in ReactCommon/jsi/jsi/Decorator.h or by following this link: // https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/jsi/jsi/decorator.h -class WorkletHermesRuntime : public jsi::WithRuntimeDecorator { +class WorkletHermesRuntime + : public jsi::WithRuntimeDecorator { public: WorkletHermesRuntime( std::unique_ptr runtime, const std::shared_ptr &jsQueue, const std::string &name); - ~WorkletHermesRuntime() override; + ~WorkletHermesRuntime(); private: std::unique_ptr runtime_; WorkletsReentrancyCheck reentrancyCheck_; -#if HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#if HERMES_ENABLE_DEBUGGER chrome::DebugSessionToken debugToken_; -#endif // HERMES_ENABLE_DEBUGGER && !defined(HERMES_V1_ENABLED) +#endif // HERMES_ENABLE_DEBUGGER }; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp index f9ded288..5e863500 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include @@ -14,9 +13,7 @@ #include #include -#include #include -#include #if JS_RUNTIME_HERMES #include @@ -30,7 +27,8 @@ class AroundLock { const std::shared_ptr mutex_; public: - explicit AroundLock(const std::shared_ptr &mutex) : mutex_(mutex) {} + explicit AroundLock(const std::shared_ptr &mutex) + : mutex_(mutex) {} void before() const { mutex_->lock(); @@ -61,7 +59,8 @@ static std::shared_ptr makeRuntime( std::shared_ptr jsiRuntime; #if JS_RUNTIME_HERMES auto hermesRuntime = facebook::hermes::makeHermesRuntime(); - jsiRuntime = std::make_shared(std::move(hermesRuntime), jsQueue, name); + jsiRuntime = std::make_shared( + std::move(hermesRuntime), jsQueue, name); #else jsiRuntime = facebook::jsc::makeJSCRuntime(); #endif @@ -82,37 +81,37 @@ WorkletRuntime::WorkletRuntime( queue_(queue) { jsi::Runtime &rt = *runtime_; WorkletRuntimeCollector::install(rt); - if (enableEventLoop) { + if (enableEventLoop && name != uiRuntimeName) { eventLoop_ = std::make_shared(name_, runtime_, queue_); eventLoop_->run(); } } -void WorkletRuntime::init(std::shared_ptr jsiWorkletsModuleProxy) { +void WorkletRuntime::init( + std::shared_ptr jsiWorkletsModuleProxy) { jsi::Runtime &rt = *runtime_; - -#if REACT_NATIVE_MINOR_VERSION >= 81 - rt.setRuntimeData( - RuntimeData::weakRuntimeUUID, - std::make_shared(WeakRuntimeHolder{.weakRuntime = weak_from_this()})); -#endif // REACT_NATIVE_MINOR_VERSION >= 81 - const auto jsScheduler = jsiWorkletsModuleProxy->getJSScheduler(); const auto isDevBundle = jsiWorkletsModuleProxy->isDevBundle(); - const auto memoryManager_ = jsiWorkletsModuleProxy->getMemoryManager(); #ifdef WORKLETS_BUNDLE_MODE auto script = jsiWorkletsModuleProxy->getScript(); const auto &sourceUrl = jsiWorkletsModuleProxy->getSourceUrl(); #endif // WORKLETS_BUNDLE_MODE - auto optimizedJsiWorkletsModuleProxy = jsi_utils::optimizedFromHostObject(rt, std::move(jsiWorkletsModuleProxy)); + auto optimizedJsiWorkletsModuleProxy = + jsi_utils::optimizedFromHostObject(rt, std::move(jsiWorkletsModuleProxy)); WorkletRuntimeDecorator::decorate( - rt, name_, jsScheduler, isDevBundle, std::move(optimizedJsiWorkletsModuleProxy), eventLoop_); + rt, + name_, + jsScheduler, + isDevBundle, + std::move(optimizedJsiWorkletsModuleProxy), + eventLoop_); #ifdef WORKLETS_BUNDLE_MODE if (!script) { - throw std::runtime_error("[Worklets] Expected to receive the bundle, but got nullptr instead."); + throw std::runtime_error( + "[Worklets] Expected to receive the bundle, but got nullptr instead."); } try { @@ -121,99 +120,87 @@ void WorkletRuntime::init(std::shared_ptr jsiWorkletsMod const auto &message = error.getMessage(); const auto &stack = error.getStack(); if (!message.starts_with("[Worklets] Worklets initialized successfully")) { - const auto newMessage = "[Worklets] Failed to initialize runtime. Reason: " + message; + const auto newMessage = + "[Worklets] Failed to initialize runtime. Reason: " + message; JSLogger::reportFatalErrorOnJS( - jsScheduler, {.message = newMessage, .stack = stack, .name = "WorkletsError", .jsEngine = "Worklets"}); + jsScheduler, + {.message = newMessage, + .stack = stack, + .name = "WorkletsError", + .jsEngine = "Worklets"}); } } #else // Legacy behavior - auto valueUnpackerBuffer = std::make_shared(ValueUnpackerCode); + auto valueUnpackerBuffer = + std::make_shared(ValueUnpackerCode); rt.evaluateJavaScript(valueUnpackerBuffer, "valueUnpacker"); - auto synchronizableUnpackerBuffer = std::make_shared(SynchronizableUnpackerCode); + auto synchronizableUnpackerBuffer = + std::make_shared(SynchronizableUnpackerCode); rt.evaluateJavaScript(synchronizableUnpackerBuffer, "synchronizableUnpacker"); - - auto customSerializableUnpackerBuffer = std::make_shared(CustomSerializableUnpackerCode); - rt.evaluateJavaScript(customSerializableUnpackerBuffer, "customSerializableUnpacker"); #endif // WORKLETS_BUNDLE_MODE - try { - memoryManager_->loadAllCustomSerializables(shared_from_this()); - } catch (jsi::JSError &e) { - throw std::runtime_error(std::string("[Worklets] Failed to load custom serializables. Reason: ") + e.getMessage()); - } } -/* #region schedule */ - -void WorkletRuntime::schedule(jsi::Function &&function) const { +void WorkletRuntime::runAsyncGuarded( + const std::shared_ptr &worklet) { react_native_assert( - queue_ && - "[Worklets] Tried to invoke `schedule` on a Worklet Runtime but the " - "async queue is not set. Recreate the runtime with a valid async queue."); - queue_->push([function = std::make_shared(std::move(function)), weakThis = weak_from_this()]() { + "[Worklets] Tried to invoke `runAsyncGuarded` on a Worklet Runtime but " + "the async queue is not set. Recreate the runtime with a valid async queue."); + + queue_->push([worklet, weakThis = weak_from_this()] { auto strongThis = weakThis.lock(); if (!strongThis) { return; } - strongThis->runSync(*function); + strongThis->runGuarded(worklet); }); } -void WorkletRuntime::schedule(std::shared_ptr worklet) const { - react_native_assert( - queue_ && - "[Worklets] Tried to invoke `schedule` on a Worklet Runtime but the " - "async queue is not set. Recreate the runtime with a valid async queue."); - - queue_->push([worklet = std::move(worklet), weakThis = weak_from_this()] { - auto strongThis = weakThis.lock(); - if (!strongThis) { - return; - } - - strongThis->runSync(worklet); - }); +jsi::Value WorkletRuntime::executeSync( + jsi::Runtime &rt, + const jsi::Value &worklet) const { + auto serializableWorklet = extractSerializableOrThrow( + rt, + worklet, + "[Worklets] Only worklets can be executed synchronously on UI runtime."); + auto lock = std::unique_lock(*runtimeMutex_); + jsi::Runtime &uiRuntime = getJSIRuntime(); + auto result = runGuarded(serializableWorklet); + auto serializableResult = extractSerializableOrThrow(uiRuntime, result); + lock.unlock(); + return serializableResult->toJSValue(rt); } -void WorkletRuntime::schedule(std::function job) const { - react_native_assert( - queue_ && - "[Worklets] Tried to invoke `schedule` on a Worklet Runtime but the " - "async queue is not set. Recreate the runtime with a valid async queue."); - - queue_->push(std::move(job)); +#ifdef WORKLETS_BUNDLE_MODE +jsi::Value WorkletRuntime::executeSync( + std::function &&job) const { + auto lock = std::unique_lock(*runtimeMutex_); + jsi::Runtime &uiRuntime = getJSIRuntime(); + return job(uiRuntime); } -void WorkletRuntime::schedule(std::function job) const { - react_native_assert( - queue_ && - "[Worklets] Tried to invoke `schedule` on a Worklet Runtime but the " - "async queue is not set. Recreate the runtime with a valid async queue."); - - queue_->push([job = std::move(job), weakThis = weak_from_this()]() { - auto strongThis = weakThis.lock(); - if (!strongThis) { - return; - } - - auto lock = std::unique_lock(*strongThis->runtimeMutex_); - jsi::Runtime &runtime = strongThis->getJSIRuntime(); - job(runtime); - }); +jsi::Value WorkletRuntime::executeSync( + const std::function &job) const { + auto lock = std::unique_lock(*runtimeMutex_); + jsi::Runtime &uiRuntime = getJSIRuntime(); + return job(uiRuntime); } +#endif // WORKLETS_BUNDLE_MODE -/* #endregion */ - -jsi::Value WorkletRuntime::get(jsi::Runtime &rt, const jsi::PropNameID &propName) { +jsi::Value WorkletRuntime::get( + jsi::Runtime &rt, + const jsi::PropNameID &propName) { auto name = propName.utf8(rt); if (name == "toString") { return jsi::Function::createFromHostFunction( rt, propName, 0, - [weakThis = weak_from_this()](jsi::Runtime &rt, const jsi::Value &, const jsi::Value *, size_t) -> jsi::Value { + [weakThis = weak_from_this()]( + jsi::Runtime &rt, const jsi::Value &, const jsi::Value *, size_t) + -> jsi::Value { auto strongThis = weakThis.lock(); if (!strongThis) { return jsi::String::createFromUtf8(rt, ""); @@ -228,14 +215,17 @@ jsi::Value WorkletRuntime::get(jsi::Runtime &rt, const jsi::PropNameID &propName return jsi::Value::undefined(); } -std::vector WorkletRuntime::getPropertyNames(jsi::Runtime &rt) { +std::vector WorkletRuntime::getPropertyNames( + jsi::Runtime &rt) { std::vector result; result.push_back(jsi::PropNameID::forUtf8(rt, "toString")); result.push_back(jsi::PropNameID::forUtf8(rt, "name")); return result; } -std::shared_ptr extractWorkletRuntime(jsi::Runtime &rt, const jsi::Value &value) { +std::shared_ptr extractWorkletRuntime( + jsi::Runtime &rt, + const jsi::Value &value) { return value.getObject(rt).getHostObject(rt); } @@ -248,68 +238,7 @@ void scheduleOnRuntime( rt, serializableWorkletValue, "[Worklets] Function passed to `_scheduleOnRuntime` is not a serializable worklet."); - workletRuntime->schedule(serializableWorklet); + workletRuntime->runAsyncGuarded(serializableWorklet); } -#if REACT_NATIVE_MINOR_VERSION >= 81 -std::weak_ptr WorkletRuntime::getWeakRuntimeFromJSIRuntime(jsi::Runtime &rt) { - auto runtimeData = rt.getRuntimeData(RuntimeData::weakRuntimeUUID); - if (!runtimeData) [[unlikely]] { - throw std::runtime_error( - "[Worklets] No weak runtime data found on the provided JSI runtime." - " Perhaps the JSI Runtime is not a WorkletRuntime?"); - } - auto weakHolder = std::static_pointer_cast(runtimeData); - return weakHolder->weakRuntime; -} -#endif // REACT_NATIVE_MINOR_VERSION >= 81 - -/* #region deprecated */ - -void WorkletRuntime::runAsyncGuarded(const std::shared_ptr &worklet) { - schedule(worklet); -} - -jsi::Value WorkletRuntime::executeSync(jsi::Runtime &caller, const jsi::Value &worklet) const { - auto serializableWorklet = extractSerializableOrThrow( - caller, worklet, "[Worklets] Only worklets can be executed synchronously on UI runtime."); - auto result = runSyncSerialized(serializableWorklet); - return result->toJSValue(caller); -} - -jsi::Value WorkletRuntime::executeSync(std::function &&job) const { - return runSync(job); -} - -jsi::Value WorkletRuntime::executeSync(const std::function &job) const { - return runSync(job); -} - -#ifndef NDEBUG -static const auto callGuardLambda = [](facebook::jsi::Runtime &rt, - const facebook::jsi::Value &thisVal, - const facebook::jsi::Value *args, - size_t count) { - return args[0].asObject(rt).asFunction(rt).call(rt, args + 1, count - 1); -}; - -jsi::Function WorkletRuntime::getCallGuard(jsi::Runtime &rt) { - auto callGuard = rt.global().getProperty(rt, "__callGuardDEV"); - if (callGuard.isObject()) { - // Use JS implementation if `__callGuardDEV` has already been installed. - // This is the desired behavior. - return callGuard.asObject(rt).asFunction(rt); - } - - // Otherwise, fallback to C++ JSI implementation. This is necessary so that we - // can install `__callGuardDEV` itself and should happen only once. Note that - // the C++ implementation doesn't intercept errors and simply throws them as - // C++ exceptions which crashes the app. We assume that installing the guard - // doesn't throw any errors. - return jsi::Function::createFromHostFunction(rt, jsi::PropNameID::forAscii(rt, "callGuard"), 1, callGuardLambda); -} -#endif // NDEBUG - -/* #endregion */ - } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h index 715c7009..7d6761b5 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h @@ -5,7 +5,7 @@ #include #include -#include +#include #include #include #include @@ -14,7 +14,6 @@ #include #include -#include #include #include @@ -23,111 +22,14 @@ using namespace react; namespace worklets { -template -concept ImplicitlySerializableCallable = std::is_assignable_v || - std::is_assignable_v &, TCallable>; - -template -concept RuntimeCallable = requires(TCallable &&callable, jsi::Runtime &rt) { - // NOLINTNEXTLINE(readability/braces) cpplint doesn't understand concepts - { callable(rt) }; -} || ImplicitlySerializableCallable; - /** * Forward declaration to avoid circular dependencies. */ class JSIWorkletsModuleProxy; -class WorkletRuntime : public jsi::HostObject, public std::enable_shared_from_this { +class WorkletRuntime : public jsi::HostObject, + public std::enable_shared_from_this { public: - void schedule(jsi::Function &&function) const; - void schedule(std::shared_ptr worklet) const; - void schedule(std::function job) const; - void schedule(std::function job) const; - - /* #region runSync */ - - template - std::invoke_result_t runSync(TCallable &&callable, Args &&...args) const; - template - jsi::Value runSync(const jsi::Function &function, Args &&...args) const { - auto &rt = *runtime_; - // We only use callGuard in debug mode, otherwise we call the provided - // function directly. CallGuard provides a way of capturing exceptions in - // JavaScript and propagating them to the main React Native thread such that - // they can be presented using RN's LogBox. -#ifndef NDEBUG - return getCallGuard(rt).call(rt, function, args...); -#else - return function.call(rt, args...); -#endif // NDEBUG - } - template - jsi::Value runSync(const std::shared_ptr &worklet, Args &&...args) const { - jsi::Runtime &rt = *runtime_; - return runSync(worklet->toJSValue(rt).asObject(rt).asFunction(rt), std::forward(args)...); - } - template - std::invoke_result_t runSync(TCallable &&job) const { - jsi::Runtime &rt = getJSIRuntime(); - auto lock = std::unique_lock(*runtimeMutex_); - return job(rt); - } - - /* #endregion */ - - /* #region runSyncSerialized */ - - template - std::shared_ptr runSyncSerialized(TCallable &&callable, Args &&...args) const; - template - std::shared_ptr runSyncSerialized(const jsi::Function &function, Args &&...args) const { - jsi::Runtime &rt = getJSIRuntime(); - auto lock = std::unique_lock(*runtimeMutex_); - auto result = runSync(function, std::forward(args)...); - auto serializableResult = extractSerializableOrThrow( - rt, - result, - "[Worklets] Function passed to `runSyncSerialized`" - "must return a value serialized with `createSerializable`."); - return serializableResult; - } - template - std::shared_ptr runSyncSerialized(const std::shared_ptr &worklet, Args &&...args) - const { - jsi::Runtime &rt = getJSIRuntime(); - auto lock = std::unique_lock(*runtimeMutex_); - auto result = runSync(worklet, std::forward(args)...); - auto serializableResult = extractSerializableOrThrow( - rt, - result, - "[Worklets] Worklet passed to `runSyncSerialized`" - "must return a value serialized with `createSerializable`."); - return serializableResult; - } - - /* #endregion */ - - jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &propName) override; - - std::vector getPropertyNames(jsi::Runtime &rt) override; - - [[nodiscard]] std::string toString() const noexcept { - return "[WorkletRuntime \"" + name_ + "\"]"; - } - - [[nodiscard]] jsi::Runtime &getJSIRuntime() const noexcept { - return *runtime_; - } - - [[nodiscard]] uint64_t getRuntimeId() const noexcept { - return runtimeId_; - } - - [[nodiscard]] std::string getRuntimeName() const noexcept { - return name_; - } - explicit WorkletRuntime( uint64_t runtimeId, const std::shared_ptr &jsQueue, @@ -137,40 +39,45 @@ class WorkletRuntime : public jsi::HostObject, public std::enable_shared_from_th void init(std::shared_ptr jsiWorkletsModuleProxy); - /* #region deprecated */ + jsi::Runtime &getJSIRuntime() const { + return *runtime_; + } - /** @deprecated Use `runSync` instead. */ template - jsi::Value runGuarded(const std::shared_ptr &worklet, Args &&...args) const { - return runSync(worklet, std::forward(args)...); + inline jsi::Value runGuarded( + const std::shared_ptr &serializableWorklet, + Args &&...args) const { + jsi::Runtime &rt = *runtime_; + return runOnRuntimeGuarded( + rt, serializableWorklet->toJSValue(rt), std::forward(args)...); } - /** @deprecated Use `schedule` instead. */ void runAsyncGuarded(const std::shared_ptr &worklet); - /** @deprecated Use `runSyncSerialized` and extract to `jsi::Value` with - * `extractSerializableOrThrow` instead. */ jsi::Value executeSync(jsi::Runtime &rt, const jsi::Value &worklet) const; - /** @deprecated Use `runSync` instead. */ + +#ifdef WORKLETS_BUNDLE_MODE jsi::Value executeSync(std::function &&job) const; - /** @deprecated Use `runSync` instead. */ - jsi::Value executeSync(const std::function &job) const; - /* #endregion */ + jsi::Value executeSync( + const std::function &job) const; +#endif // WORKLETS_BUNDLE_MODE -#if REACT_NATIVE_MINOR_VERSION >= 81 - /** - * Retrieves a weak reference to the WorkletRuntime associated with the - * provided jsi::Runtime. - * - * Throws when invoked with a non-worklet runtime. - */ - static std::weak_ptr getWeakRuntimeFromJSIRuntime(jsi::Runtime &rt); -#endif // REACT_NATIVE_MINOR_VERSION >= 81 + std::string toString() const { + return "[WorkletRuntime \"" + name_ + "\"]"; + } -#ifndef NDEBUG - static jsi::Function getCallGuard(jsi::Runtime &rt); -#endif // NDEBUG + jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &propName) override; + + std::vector getPropertyNames(jsi::Runtime &rt) override; + + [[nodiscard]] auto getRuntimeId() const -> uint64_t { + return runtimeId_; + } + + [[nodiscard]] auto getRuntimeName() const -> std::string { + return name_; + } private: const uint64_t runtimeId_; @@ -183,35 +90,13 @@ class WorkletRuntime : public jsi::HostObject, public std::enable_shared_from_th // This function needs to be non-inline to avoid problems with dynamic_cast on // Android -std::shared_ptr extractWorkletRuntime(jsi::Runtime &rt, const jsi::Value &value); +std::shared_ptr extractWorkletRuntime( + jsi::Runtime &rt, + const jsi::Value &value); void scheduleOnRuntime( jsi::Runtime &rt, const jsi::Value &workletRuntimeValue, const jsi::Value &serializableWorkletValue); -/** - * @deprecated Use `WorkletRuntime::runSync` instead. - */ -template -inline jsi::Value runOnRuntimeGuarded(jsi::Runtime &rt, const jsi::Function &function, Args &&...args) { - // We only use callGuard in debug mode, otherwise we call the provided - // function directly. CallGuard provides a way of capturing exceptions in - // JavaScript and propagating them to the main React Native thread such that - // they can be presented using RN's LogBox. -#ifndef NDEBUG - return WorkletRuntime::getCallGuard(rt).call(rt, function, args...); -#else - return function.call(rt, args...); -#endif // NDEBUG -} - -/** - * @deprecated Use `WorkletRuntime::runSync` instead. - */ -template -inline jsi::Value runOnRuntimeGuarded(jsi::Runtime &rt, const jsi::Value &function, Args &&...args) { - return runOnRuntimeGuarded(rt, function.asObject(rt).asFunction(rt), std::forward(args)...); -} - } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h index 47d3b40d..09c70913 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h @@ -19,7 +19,7 @@ class WorkletRuntimeCollector : public jsi::HostObject { WorkletRuntimeRegistry::registerRuntime(runtime_); } - ~WorkletRuntimeCollector() override { + ~WorkletRuntimeCollector() { WorkletRuntimeRegistry::unregisterRuntime(runtime_); } diff --git a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp index d64c0464..32df7d57 100644 --- a/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +++ b/frontend-admin/node_modules/react-native-worklets/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp @@ -6,8 +6,6 @@ #include #include -#include -#include #include #include @@ -16,7 +14,9 @@ namespace worklets { static inline double performanceNow() { // copied from JSExecutor.cpp auto time = std::chrono::steady_clock::now(); - auto duration = std::chrono::duration_cast(time.time_since_epoch()).count(); + auto duration = std::chrono::duration_cast( + time.time_since_epoch()) + .count(); constexpr double NANOSECONDS_IN_MILLISECOND = 1000000.0; return duration / NANOSECONDS_IN_MILLISECOND; @@ -24,7 +24,7 @@ static inline double performanceNow() { static inline std::vector parseArgs( jsi::Runtime &rt, - const std::shared_ptr &serializableArgs) { + std::shared_ptr serializableArgs) { if (serializableArgs == nullptr) { return {}; } @@ -48,7 +48,8 @@ void WorkletRuntimeDecorator::decorate( // resolves "ReferenceError: Property 'global' doesn't exist at ..." rt.global().setProperty(rt, "global", rt.global()); - rt.global().setProperty(rt, runtimeKindBindingName, static_cast(RuntimeKind::Worker)); + rt.global().setProperty( + rt, runtimeKindBindingName, static_cast(RuntimeKind::Worker)); rt.global().setProperty(rt, "_WORKLET", true); @@ -60,12 +61,16 @@ void WorkletRuntimeDecorator::decorate( rt.global().setProperty(rt, "__DEV__", isDevBundle); - rt.global().setProperty(rt, "__workletsModuleProxy", std::move(jsiWorkletsModuleProxy)); + rt.global().setProperty( + rt, "__workletsModuleProxy", std::move(jsiWorkletsModuleProxy)); #ifndef NDEBUG - auto evalWithSourceUrl = - [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value { - auto code = std::make_shared(args[0].asString(rt).utf8(rt)); + auto evalWithSourceUrl = [](jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + size_t count) -> jsi::Value { + auto code = std::make_shared( + args[0].asString(rt).utf8(rt)); std::string url; if (count > 1 && args[1].isString()) { url = args[1].asString(rt).utf8(rt); @@ -76,51 +81,85 @@ void WorkletRuntimeDecorator::decorate( rt, "evalWithSourceUrl", jsi::Function::createFromHostFunction( - rt, jsi::PropNameID::forAscii(rt, "evalWithSourceUrl"), 1, evalWithSourceUrl)); + rt, + jsi::PropNameID::forAscii(rt, "evalWithSourceUrl"), + 1, + evalWithSourceUrl)); #endif // NDEBUG jsi_utils::installJsiFunction( - rt, "_log", [](jsi::Runtime &rt, const jsi::Value &value) { PlatformLogger::log(stringifyJSIValue(rt, value)); }); - - jsi_utils::installJsiFunction(rt, "_toString", [](jsi::Runtime &rt, const jsi::Value &value) { - return jsi::String::createFromUtf8(rt, stringifyJSIValue(rt, value)); - }); - - jsi_utils::installJsiFunction( - rt, "_createSerializable", [](jsi::Runtime &rt, const jsi::Value &value, const jsi::Value &nativeStateSource) { - auto shouldRetainRemote = jsi::Value::undefined(); - return makeSerializableClone(rt, value, shouldRetainRemote, nativeStateSource); + rt, "_log", [](jsi::Runtime &rt, const jsi::Value &value) { + PlatformLogger::log(stringifyJSIValue(rt, value)); }); - jsi_utils::installJsiFunction(rt, "_createSerializableHostObject", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableHostObject(rt, value.asObject(rt).asHostObject(rt)); - }); - - jsi_utils::installJsiFunction(rt, "_createSerializableString", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableString(rt, value.asString(rt)); - }); - - jsi_utils::installJsiFunction(rt, "_createSerializableNumber", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableNumber(rt, value.asNumber()); - }); - - jsi_utils::installJsiFunction(rt, "_createSerializableBoolean", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableBoolean(rt, value.asBool()); - }); - - jsi_utils::installJsiFunction(rt, "_createSerializableBigInt", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableBigInt(rt, value.asBigInt(rt)); - }); + jsi_utils::installJsiFunction( + rt, "_toString", [](jsi::Runtime &rt, const jsi::Value &value) { + return jsi::String::createFromUtf8(rt, stringifyJSIValue(rt, value)); + }); jsi_utils::installJsiFunction( - rt, "_createSerializableUndefined", [](jsi::Runtime &rt) { return makeSerializableUndefined(rt); }); - - jsi_utils::installJsiFunction(rt, "_createSerializableArray", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableArray(rt, value.asObject(rt).asArray(rt), false); - }); + rt, + "_createSerializable", + [](jsi::Runtime &rt, + const jsi::Value &value, + const jsi::Value &nativeStateSource) { + auto shouldRetainRemote = jsi::Value::undefined(); + return makeSerializableClone( + rt, value, shouldRetainRemote, nativeStateSource); + }); jsi_utils::installJsiFunction( - rt, "_createSerializableNull", [](jsi::Runtime &rt) { return makeSerializableNull(rt); }); + rt, + "_createSerializableHostObject", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableHostObject( + rt, value.asObject(rt).asHostObject(rt)); + }); + + jsi_utils::installJsiFunction( + rt, + "_createSerializableString", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableString(rt, value.asString(rt)); + }); + + jsi_utils::installJsiFunction( + rt, + "_createSerializableNumber", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableNumber(rt, value.asNumber()); + }); + + jsi_utils::installJsiFunction( + rt, + "_createSerializableBoolean", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableBoolean(rt, value.asBool()); + }); + + jsi_utils::installJsiFunction( + rt, + "_createSerializableBigInt", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableBigInt(rt, value.asBigInt(rt)); + }); + + jsi_utils::installJsiFunction( + rt, "_createSerializableUndefined", [](jsi::Runtime &rt) { + return makeSerializableUndefined(rt); + }); + + jsi_utils::installJsiFunction( + rt, + "_createSerializableArray", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableArray(rt, value.asObject(rt).asArray(rt), false); + }); + + jsi_utils::installJsiFunction( + rt, "_createSerializableNull", [](jsi::Runtime &rt) { + return makeSerializableNull(rt); + }); jsi_utils::installJsiFunction( rt, @@ -129,46 +168,70 @@ void WorkletRuntimeDecorator::decorate( const jsi::Value &value, const jsi::Value &shouldRetainRemote, const jsi::Value &nativeStateSource) { - return makeSerializableObject(rt, value.getObject(rt), shouldRetainRemote.getBool(), nativeStateSource); + return makeSerializableObject( + rt, + value.getObject(rt), + shouldRetainRemote.getBool(), + nativeStateSource); }); - jsi_utils::installJsiFunction(rt, "_createSerializableWorklet", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableWorklet(rt, value.asObject(rt), false); - }); + jsi_utils::installJsiFunction( + rt, + "_createSerializableWorklet", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableWorklet(rt, value.asObject(rt), false); + }); - jsi_utils::installJsiFunction(rt, "_createSerializableInitializer", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableInitializer(rt, value.asObject(rt)); - }); + jsi_utils::installJsiFunction( + rt, + "_createSerializableInitializer", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableInitializer(rt, value.asObject(rt)); + }); - jsi_utils::installJsiFunction(rt, "_createSerializableFunction", [](jsi::Runtime &rt, const jsi::Value &value) { - return makeSerializableFunction(rt, value.asObject(rt).asFunction(rt)); - }); + jsi_utils::installJsiFunction( + rt, + "_createSerializableFunction", + [](jsi::Runtime &rt, const jsi::Value &value) { + return makeSerializableFunction(rt, value.asObject(rt).asFunction(rt)); + }); - jsi_utils::installJsiFunction(rt, "_createSerializableSynchronizable", [](jsi::Runtime &rt, const jsi::Value &value) { - return SerializableJSRef::newNativeStateObject(rt, extractSerializableOrThrow(rt, value)); - }); + jsi_utils::installJsiFunction( + rt, + "_createSerializableSynchronizable", + [](jsi::Runtime &rt, const jsi::Value &value) { + return SerializableJSRef::newNativeStateObject( + rt, extractSerializableOrThrow(rt, value)); + }); jsi_utils::installJsiFunction( rt, "_scheduleRemoteFunctionOnJS", - [jsScheduler](jsi::Runtime &rt, const jsi::Value &funValue, const jsi::Value &argsValue) { - auto serializableRemoteFun = extractSerializableOrThrow( + [jsScheduler]( + jsi::Runtime &rt, + const jsi::Value &funValue, + const jsi::Value &argsValue) { + auto serializableRemoteFun = extractSerializableOrThrow< + SerializableRemoteFunction>( rt, funValue, "[Worklets] Incompatible object passed to scheduleOnJS. It is only allowed to schedule worklets or functions defined on the React Native JS runtime this way."); auto serializableArgs = argsValue.isUndefined() ? nullptr - : extractSerializableOrThrow(rt, argsValue, "[Worklets] Args must be an array."); + : extractSerializableOrThrow( + rt, argsValue, "[Worklets] Args must be an array."); jsScheduler->scheduleOnJS([=](jsi::Runtime &rt) { - auto fun = serializableRemoteFun->toJSValue(rt).asObject(rt).asFunction(rt); + auto fun = + serializableRemoteFun->toJSValue(rt).asObject(rt).asFunction(rt); if (serializableArgs == nullptr) { // fast path for remote function w/o arguments fun.call(rt); } else { auto args = parseArgs(rt, serializableArgs); - fun.call(rt, const_cast(args.data()), args.size()); + fun.call( + rt, const_cast(args.data()), args.size()); } }); }); @@ -176,23 +239,34 @@ void WorkletRuntimeDecorator::decorate( jsi_utils::installJsiFunction( rt, "_scheduleHostFunctionOnJS", - [jsScheduler](jsi::Runtime &rt, const jsi::Value &hostFunValue, const jsi::Value &argsValue) { - auto hostFun = hostFunValue.asObject(rt).asFunction(rt).getHostFunction(rt); + [jsScheduler]( + jsi::Runtime &rt, + const jsi::Value &hostFunValue, + const jsi::Value &argsValue) { + auto hostFun = + hostFunValue.asObject(rt).asFunction(rt).getHostFunction(rt); auto serializableArgs = argsValue.isUndefined() ? nullptr - : extractSerializableOrThrow(rt, argsValue, "[Worklets] Args must be an array."); + : extractSerializableOrThrow( + rt, argsValue, "[Worklets] Args must be an array."); jsScheduler->scheduleOnJS([=](jsi::Runtime &rt) { auto args = parseArgs(rt, serializableArgs); - hostFun(rt, jsi::Value::undefined(), const_cast(args.data()), args.size()); + hostFun( + rt, + jsi::Value::undefined(), + const_cast(args.data()), + args.size()); }); }); jsi_utils::installJsiFunction( rt, "_scheduleOnRuntime", - [](jsi::Runtime &rt, const jsi::Value &workletRuntimeValue, const jsi::Value &serializableWorkletValue) { + [](jsi::Runtime &rt, + const jsi::Value &workletRuntimeValue, + const jsi::Value &serializableWorkletValue) { scheduleOnRuntime(rt, workletRuntimeValue, serializableWorkletValue); }); @@ -204,20 +278,25 @@ void WorkletRuntimeDecorator::decorate( rt, jsi::PropNameID::forAscii(rt, "now"), 0, - [](jsi::Runtime &runtime, const jsi::Value &, const jsi::Value *args, size_t count) { - return jsi::Value(performanceNow()); - })); + [](jsi::Runtime &runtime, + const jsi::Value &, + const jsi::Value *args, + size_t count) { return jsi::Value(performanceNow()); })); rt.global().setProperty(rt, "performance", performance); jsi_utils::installJsiFunction( rt, "_scheduleTimeoutCallback", [weakEventLoop = std::weak_ptr(eventLoop)]( - jsi::Runtime &rt, const jsi::Value &delayJs, const jsi::Value &handlerIdJs) -> jsi::Value { + jsi::Runtime &rt, + const jsi::Value &delayJs, + const jsi::Value &handlerIdJs) -> jsi::Value { const auto delay = delayJs.asNumber(); const auto handlerId = handlerIdJs.asNumber(); const auto job = [handlerId](jsi::Runtime &rt) { - rt.global().getPropertyAsFunction(rt, "__runTimeoutCallback").call(rt, handlerId); + rt.global() + .getPropertyAsFunction(rt, "__runTimeoutCallback") + .call(rt, handlerId); }; if (auto strongEventLoop = weakEventLoop.lock()) { strongEventLoop->pushTimeout(job, delay); diff --git a/frontend-admin/node_modules/react-native-worklets/RNWorklets.podspec b/frontend-admin/node_modules/react-native-worklets/RNWorklets.podspec index d658b491..2133f86f 100644 --- a/frontend-admin/node_modules/react-native-worklets/RNWorklets.podspec +++ b/frontend-admin/node_modules/react-native-worklets/RNWorklets.podspec @@ -11,8 +11,7 @@ worklets_assert_new_architecture_enabled($new_arch_enabled) ios_min_version = '13.4' feature_flags = "-DWORKLETS_FEATURE_FLAGS=\"#{worklets_get_static_feature_flags()}\"" -version_flags = "-DWORKLETS_VERSION=#{package['version']} -DREACT_NATIVE_MINOR_VERSION=#{$worklets_config[:react_native_minor_version]}" -hermes_v1_flag = ENV['RCT_HERMES_V1_ENABLED'] == '1' ? '-DHERMES_V1_ENABLED' : '' +version_flags = "-DWORKLETS_VERSION=#{package['version']}" Pod::Spec.new do |s| s.name = "RNWorklets" @@ -76,7 +75,7 @@ Pod::Spec.new do |s| "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", "GCC_PREPROCESSOR_DEFINITIONS[config=*Debug*]" => "$(inherited) #{hermes_debug_hidden_flags} #{bundle_mode_flag}", "GCC_PREPROCESSOR_DEFINITIONS[config=*Release*]" => "$(inherited) #{bundle_mode_flag}", - "OTHER_CFLAGS" => "$(inherited) #{feature_flags} #{version_flags} #{hermes_v1_flag}", + "OTHER_CFLAGS" => "$(inherited) #{feature_flags} #{version_flags}", } s.xcconfig = { "HEADER_SEARCH_PATHS" => [ diff --git a/frontend-admin/node_modules/react-native-worklets/android/CMakeLists.txt b/frontend-admin/node_modules/react-native-worklets/android/CMakeLists.txt index 7ce60581..1d949d6b 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/CMakeLists.txt +++ b/frontend-admin/node_modules/react-native-worklets/android/CMakeLists.txt @@ -15,9 +15,8 @@ string( APPEND CMAKE_CXX_FLAGS " -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}\ - -DWORKLETS_VERSION=${WORKLETS_VERSION}\ - -DWORKLETS_FEATURE_FLAGS=\"${WORKLETS_FEATURE_FLAGS}\"\ - -DHERMES_V1_ENABLED=${HERMES_V1_ENABLED}") + -DWORKLETS_VERSION=${WORKLETS_VERSION}\ + -DWORKLETS_FEATURE_FLAGS=\"${WORKLETS_FEATURE_FLAGS}\"") string(APPEND CMAKE_CXX_FLAGS " -fno-omit-frame-pointer -fstack-protector-all") @@ -85,24 +84,41 @@ target_include_directories( "${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx" ) +if(ReactAndroid_VERSION_MINOR LESS 76) + target_link_libraries( + worklets ReactAndroid::fabricjni ReactAndroid::react_debug + ReactAndroid::react_render_core + ReactAndroid::react_render_componentregistry ReactAndroid::rrc_view) +endif() + # build shared lib set_target_properties(worklets PROPERTIES LINKER_LANGUAGE CXX) -target_link_libraries(worklets log ReactAndroid::reactnative ReactAndroid::jsi - fbjni::fbjni) +target_link_libraries(worklets log ReactAndroid::jsi fbjni::fbjni) + +if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::reactnative) +else() + target_link_libraries( + worklets ReactAndroid::react_nativemodule_core ReactAndroid::folly_runtime + ReactAndroid::glog ReactAndroid::reactnativejni) +endif() if(${JS_RUNTIME} STREQUAL "hermes") - if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 82) - target_link_libraries(worklets hermes-engine::hermesvm) - else() - target_link_libraries(worklets hermes-engine::libhermes) - endif() + target_link_libraries(worklets hermes-engine::libhermes) if(${HERMES_ENABLE_DEBUGGER}) string(APPEND CMAKE_CXX_FLAGS " -DHERMES_ENABLE_DEBUGGER=1") - - target_link_libraries(worklets ReactAndroid::hermestooling) + if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::hermestooling) + else() + target_link_libraries(worklets ReactAndroid::hermes_executor) + endif() endif() elseif(${JS_RUNTIME} STREQUAL "jsc") - target_link_libraries(worklets ReactAndroid::jsctooling) + if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::jsctooling) + else() + target_link_libraries(worklets ReactAndroid::jscexecutor) + endif() endif() diff --git a/frontend-admin/node_modules/react-native-worklets/android/build.gradle b/frontend-admin/node_modules/react-native-worklets/android/build.gradle index 61c565b3..021f5bc2 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/build.gradle +++ b/frontend-admin/node_modules/react-native-worklets/android/build.gradle @@ -102,7 +102,6 @@ def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled() def IS_REANIMATED_EXAMPLE_APP = safeAppExtGet("isReanimatedExampleApp", false) def BUNDLE_MODE = safeAppExtGet("workletsBundleMode", false) def WORKLETS_FEATURE_FLAGS = getStaticFeatureFlags() -def HERMES_V1_ENABLED = safeAppExtGet("hermesV1Enabled", false) // Set version for prefab version WORKLETS_VERSION @@ -150,8 +149,6 @@ apply plugin: "com.android.library" apply plugin: "maven-publish" apply plugin: "de.undercouch.download" -apply from: "./fix-prefab.gradle" - android { compileSdkVersion safeExtGet("compileSdkVersion", 34) @@ -199,8 +196,7 @@ android { "-DWORKLETS_BUNDLE_MODE=${BUNDLE_MODE}", "-DWORKLETS_VERSION=${WORKLETS_VERSION}", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", - "-DWORKLETS_FEATURE_FLAGS=${WORKLETS_FEATURE_FLAGS}", - "-DHERMES_V1_ENABLED=${HERMES_V1_ENABLED}" + "-DWORKLETS_FEATURE_FLAGS=${WORKLETS_FEATURE_FLAGS}" abiFilters (*reactNativeArchitectures()) targets("worklets") } @@ -248,10 +244,19 @@ android { "**/libc++_shared.so", "**/libfbjni.so", "**/libjsi.so", + "**/libfolly_json.so", + "**/libfolly_runtime.so", + "**/libglog.so", "**/libhermes.so", - "**/libhermesvm.so", + "**/libhermes-executor-debug.so", + "**/libhermes_executor.so", "**/libhermestooling.so", + "**/libreactnativejni.so", + "**/libturbomodulejsijni.so", "**/libreactnative.so", + "**/libreact_nativemodule_core.so", + "**/libreact_render*.so", + "**/librrc_root.so", "**/libjscexecutor.so", ] } diff --git a/frontend-admin/node_modules/react-native-worklets/android/fix-prefab.gradle b/frontend-admin/node_modules/react-native-worklets/android/fix-prefab.gradle deleted file mode 100644 index fcf502a0..00000000 --- a/frontend-admin/node_modules/react-native-worklets/android/fix-prefab.gradle +++ /dev/null @@ -1,53 +0,0 @@ -tasks.configureEach { task -> - // Make sure that we generate our prefab publication file only after having built the native library - // so that not a header publication file, but a full configuration publication will be generated, which - // will include the .so file - - def prefabConfigurePattern = ~/^prefab(.+)ConfigurePackage$/ - def matcher = task.name =~ prefabConfigurePattern - if (matcher.matches()) { - def variantName = matcher[0][1] - task.outputs.upToDateWhen { false } - task.dependsOn("externalNativeBuild${variantName}") - } -} - -afterEvaluate { - def abis = reactNativeArchitectures() - rootProject.allprojects.each { proj -> - - if (proj === rootProject) return - - def dependsOnThisLib = proj.configurations.any { config -> - config.dependencies.any { dep -> - dep.group == project.group && dep.name == project.name - } - } - - if (!dependsOnThisLib && proj != project) return - - if (!proj.plugins.hasPlugin('com.android.application') && !proj.plugins.hasPlugin('com.android.library')) { - return - } - - def variants = proj.android.hasProperty('applicationVariants') ? proj.android.applicationVariants : proj.android.libraryVariants - // Touch the prefab_config.json files to ensure that in ExternalNativeJsonGenerator.kt we will re-trigger the prefab CLI to - // generate a libnameConfig.cmake file that will contain our native library (.so). - // See this condition: https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/ExternalNativeJsonGenerator.kt;l=207-219?q=createPrefabBuildSystemGlue - variants.all { variant -> - def variantName = variant.name - abis.each { abi -> - def searchDir = new File(proj.projectDir, ".cxx/${variantName}") - if (!searchDir.exists()) return - def matches = [] - searchDir.eachDir { randomDir -> - def prefabFile = new File(randomDir, "${abi}/prefab_config.json") - if (prefabFile.exists()) matches << prefabFile - } - matches.each { prefabConfig -> - prefabConfig.setLastModified(System.currentTimeMillis()) - } - } - } - } -} diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java b/frontend-admin/node_modules/react-native-worklets/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java index eba112f3..bd0696b1 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java +++ b/frontend-admin/node_modules/react-native-worklets/android/src/experimentalBundling/com/swmansion/worklets/WorkletsModule.java @@ -3,12 +3,13 @@ package com.swmansion.worklets; import androidx.annotation.OptIn; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.react.bridge.BundleConsumer; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; -import com.facebook.react.fabric.BundleWrapper; +import com.facebook.react.fabric.BigStringBufferWrapper; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.facebook.soloader.SoLoader; @@ -19,7 +20,8 @@ import java.util.concurrent.atomic.AtomicBoolean; @SuppressWarnings("JavaJniMissingFunction") @ReactModule(name = WorkletsModule.NAME) -public class WorkletsModule extends NativeWorkletsModuleSpec implements LifecycleEventListener { +public class WorkletsModule extends NativeWorkletsModuleSpec + implements LifecycleEventListener, BundleConsumer { static { SoLoader.loadLibrary("worklets"); } @@ -37,9 +39,19 @@ public class WorkletsModule extends NativeWorkletsModuleSpec implements Lifecycl private final AndroidUIScheduler mAndroidUIScheduler; private final AnimationFrameQueue mAnimationFrameQueue; private boolean mSlowAnimationsEnabled; - private BundleWrapper mBundleWrapper = null; + private BigStringBufferWrapper mScriptWrapper = null; private String mSourceURL = null; + @Override + public void setScriptWrapper(BigStringBufferWrapper scriptWrapper) { + mScriptWrapper = scriptWrapper; + } + + @Override + public void setSourceURL(String sourceURL) { + mSourceURL = sourceURL; + } + /** * Invalidating concurrently could be fatal. It shouldn't happen in a normal flow, but it doesn't * cost us much to add synchronization for extra safety. @@ -52,7 +64,7 @@ public class WorkletsModule extends NativeWorkletsModuleSpec implements Lifecycl MessageQueueThread messageQueueThread, CallInvokerHolderImpl jsCallInvokerHolder, AndroidUIScheduler androidUIScheduler, - BundleWrapper bundleWrapper, + BigStringBufferWrapper scriptWrapper, String sourceURL); public WorkletsModule(ReactApplicationContext reactContext) { @@ -78,16 +90,13 @@ public class WorkletsModule extends NativeWorkletsModuleSpec implements Lifecycl var jsContext = Objects.requireNonNull(context.getJavaScriptContextHolder()).get(); var jsCallInvokerHolder = JSCallInvokerResolver.getJSCallInvokerHolder(context); - mSourceURL = context.getSourceURL(); - mBundleWrapper = context.getBundle(); - mHybridData = initHybrid( jsContext, mMessageQueueThread, jsCallInvokerHolder, mAndroidUIScheduler, - mBundleWrapper, + mScriptWrapper, mSourceURL); return true; } diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp index 4705b9a6..eb5c44d0 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp +++ b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp @@ -10,7 +10,8 @@ class UISchedulerWrapper : public UIScheduler { jni::global_ref androidUiScheduler_; public: - explicit UISchedulerWrapper(jni::global_ref androidUiScheduler) + explicit UISchedulerWrapper( + jni::global_ref androidUiScheduler) : androidUiScheduler_(androidUiScheduler) {} void scheduleOnUI(std::function job) override { @@ -22,10 +23,14 @@ class UISchedulerWrapper : public UIScheduler { } }; -AndroidUIScheduler::AndroidUIScheduler(jni::alias_ref jThis) - : javaPart_(jni::make_global(jThis)), uiScheduler_(std::make_shared(jni::make_global(jThis))) {} +AndroidUIScheduler::AndroidUIScheduler( + jni::alias_ref jThis) + : javaPart_(jni::make_global(jThis)), + uiScheduler_( + std::make_shared(jni::make_global(jThis))) {} -jni::local_ref AndroidUIScheduler::initHybrid(jni::alias_ref jThis) { +jni::local_ref AndroidUIScheduler::initHybrid( + jni::alias_ref jThis) { return makeCxxInstance(jThis); } @@ -37,7 +42,8 @@ void AndroidUIScheduler::triggerUI() { } void AndroidUIScheduler::scheduleTriggerOnUI() { - static const auto method = javaPart_->getClass()->getMethod("scheduleTriggerOnUI"); + static const auto method = + javaPart_->getClass()->getMethod("scheduleTriggerOnUI"); method(javaPart_.get()); } diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.h b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.h index e765edf2..a03afc93 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.h +++ b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AndroidUIScheduler.h @@ -14,8 +14,10 @@ using namespace worklets; class AndroidUIScheduler : public jni::HybridClass { public: - static auto constexpr kJavaDescriptor = "Lcom/swmansion/worklets/AndroidUIScheduler;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); + static auto constexpr kJavaDescriptor = + "Lcom/swmansion/worklets/AndroidUIScheduler;"; + static jni::local_ref initHybrid( + jni::alias_ref jThis); static void registerNatives(); std::shared_ptr getUIScheduler() { @@ -34,7 +36,8 @@ class AndroidUIScheduler : public jni::HybridClass { jni::global_ref javaPart_; std::shared_ptr uiScheduler_; - explicit AndroidUIScheduler(jni::alias_ref jThis); + explicit AndroidUIScheduler( + jni::alias_ref jThis); }; } // namespace worklets diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AnimationFrameCallback.h b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AnimationFrameCallback.h index 655af6cf..2083ea12 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AnimationFrameCallback.h +++ b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/AnimationFrameCallback.h @@ -6,9 +6,11 @@ namespace worklets { -class AnimationFrameCallback : public facebook::jni::HybridClass { +class AnimationFrameCallback + : public facebook::jni::HybridClass { public: - static auto constexpr kJavaDescriptor = "Lcom/swmansion/worklets/runloop/AnimationFrameCallback;"; + static auto constexpr kJavaDescriptor = + "Lcom/swmansion/worklets/runloop/AnimationFrameCallback;"; void onAnimationFrame(double timestampMs) { callback_(timestampMs); @@ -16,14 +18,16 @@ class AnimationFrameCallback : public facebook::jni::HybridClassregisterNatives({ - makeNativeMethod("onAnimationFrame", AnimationFrameCallback::onAnimationFrame), + makeNativeMethod( + "onAnimationFrame", AnimationFrameCallback::onAnimationFrame), }); } private: friend HybridBase; - explicit AnimationFrameCallback(std::function callback) : callback_(std::move(callback)) {} + explicit AnimationFrameCallback(std::function callback) + : callback_(std::move(callback)) {} std::function callback_; }; diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/PlatformLogger.cpp b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/PlatformLogger.cpp index c9b5dce9..e931aa90 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/PlatformLogger.cpp +++ b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/PlatformLogger.cpp @@ -2,8 +2,6 @@ #include -#include - constexpr const auto tag = "Worklets"; namespace worklets { diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.cpp b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.cpp index 2237cce4..84979ee6 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.cpp +++ b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.cpp @@ -5,7 +5,6 @@ #include #include -#include #include namespace worklets { @@ -19,7 +18,7 @@ WorkletsModule::WorkletsModule( jni::alias_ref messageQueueThread, const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, - const std::shared_ptr &script, + const std::shared_ptr &script, const std::string &sourceURL) : javaPart_(jni::make_global(jThis)), rnRuntime_(rnRuntime), @@ -29,25 +28,32 @@ WorkletsModule::WorkletsModule( jsCallInvoker, uiScheduler, getIsOnJSQueueThread(), - RuntimeBindings{.requestAnimationFrame = getRequestAnimationFrame()}, + getForwardedRequestAnimationFrame(), script, sourceURL)) { - auto jsiWorkletsModuleProxy = workletsModuleProxy_->createJSIWorkletsModuleProxy(); + auto jsiWorkletsModuleProxy = + workletsModuleProxy_->createJSIWorkletsModuleProxy(); auto optimizedJsiWorkletsModuleProxy = jsi_utils::optimizedFromHostObject( - *rnRuntime_, std::static_pointer_cast(std::move(jsiWorkletsModuleProxy))); + *rnRuntime_, + std::static_pointer_cast( + std::move(jsiWorkletsModuleProxy))); RNRuntimeWorkletDecorator::decorate( - *rnRuntime_, std::move(optimizedJsiWorkletsModuleProxy), workletsModuleProxy_->getJSLogger()); + *rnRuntime_, + std::move(optimizedJsiWorkletsModuleProxy), + workletsModuleProxy_->getJSLogger()); } jni::local_ref WorkletsModule::initHybrid( jni::alias_ref jThis, jlong jsContext, jni::alias_ref messageQueueThread, - jni::alias_ref jsCallInvokerHolder, + jni::alias_ref + jsCallInvokerHolder, jni::alias_ref androidUIScheduler #ifdef WORKLETS_BUNDLE_MODE , - jni::alias_ref bundleWrapper, + jni::alias_ref + scriptWrapper, const std::string &sourceURL #endif // WORKLETS_BUNDLE_MODE ) { @@ -55,27 +61,42 @@ jni::local_ref WorkletsModule::initHybrid( auto rnRuntime = reinterpret_cast(jsContext); auto uiScheduler = androidUIScheduler->cthis()->getUIScheduler(); - std::shared_ptr script = nullptr; + std::shared_ptr script = nullptr; #ifdef WORKLETS_BUNDLE_MODE - script = bundleWrapper->cthis()->getBundle(); + script = scriptWrapper->cthis()->getScript(); #else const auto sourceURL = std::string{}; #endif // WORKLETS_BUNDLE_MODE - return makeCxxInstance(jThis, rnRuntime, messageQueueThread, jsCallInvoker, uiScheduler, script, sourceURL); + return makeCxxInstance( + jThis, + rnRuntime, + messageQueueThread, + jsCallInvoker, + uiScheduler, + script, + sourceURL); } -RuntimeBindings::RequestAnimationFrame WorkletsModule::getRequestAnimationFrame() { - return [javaPart = javaPart_](std::function &&callback) -> void { +std::function)> +WorkletsModule::getForwardedRequestAnimationFrame() { + return [javaPart = + javaPart_](std::function &&callback) -> void { static const auto jRequestAnimationFrame = - javaPart->getClass()->getMethod("requestAnimationFrame"); - jRequestAnimationFrame(javaPart.get(), AnimationFrameCallback::newObjectCxxArgs(std::move(callback)).get()); + javaPart->getClass() + ->getMethod( + "requestAnimationFrame"); + jRequestAnimationFrame( + javaPart.get(), + AnimationFrameCallback::newObjectCxxArgs(std::move(callback)).get()); }; } std::function WorkletsModule::getIsOnJSQueueThread() { return [javaPart = javaPart_]() -> bool { - return javaPart->getClass()->getMethod("isOnJSQueueThread").operator()(javaPart); + return javaPart->getClass() + ->getMethod("isOnJSQueueThread") + .operator()(javaPart); }; } diff --git a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.h b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.h index 292b4845..d63c98f7 100644 --- a/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.h +++ b/frontend-admin/node_modules/react-native-worklets/android/src/main/cpp/worklets/android/WorkletsModule.h @@ -3,14 +3,13 @@ #include #include #include +#include #include -#include #ifdef WORKLETS_BUNDLE_MODE -#include +#include #endif // WORKLETS_BUNDLE_MODE #include -#include #include #include @@ -23,17 +22,21 @@ using namespace facebook::jni; class WorkletsModule : public jni::HybridClass { public: - static auto constexpr kJavaDescriptor = "Lcom/swmansion/worklets/WorkletsModule;"; + static auto constexpr kJavaDescriptor = + "Lcom/swmansion/worklets/WorkletsModule;"; static jni::local_ref initHybrid( jni::alias_ref jThis, jlong jsContext, jni::alias_ref messageQueueThread, - jni::alias_ref jsCallInvokerHolder, - jni::alias_ref androidUIScheduler + jni::alias_ref + jsCallInvokerHolder, + jni::alias_ref + androidUIScheduler #ifdef WORKLETS_BUNDLE_MODE , - jni::alias_ref bundleWrapper, + jni::alias_ref + scriptWrapper, const std::string &sourceURL #endif // WORKLETS_BUNDLE_MODE ); @@ -51,7 +54,7 @@ class WorkletsModule : public jni::HybridClass { jni::alias_ref messageQueueThread, const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, - const std::shared_ptr &bundle, + const std::shared_ptr &script, const std::string &sourceURL); void invalidateCpp(); @@ -61,7 +64,8 @@ class WorkletsModule : public jni::HybridClass { return javaPart_->getClass()->getMethod(methodName.c_str()); } - RuntimeBindings::RequestAnimationFrame getRequestAnimationFrame(); + std::function)> + getForwardedRequestAnimationFrame(); std::function getIsOnJSQueueThread(); diff --git a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AnimationFrameQueue.mm b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AnimationFrameQueue.mm index b93cd2c6..6d9f3232 100644 --- a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AnimationFrameQueue.mm +++ b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AnimationFrameQueue.mm @@ -5,10 +5,6 @@ #import #import -#if TARGET_OS_OSX -#import -#endif // TARGET_OS_OSX - #import constexpr auto TIME_SAMPLES_AMOUNT = 4; @@ -38,11 +34,7 @@ typedef void (^AnimationFrameCallback)(WorkletsDisplayLink *displayLink); { AssertJavaScriptQueue(); if constexpr (worklets::StaticFeatureFlags::getFlag("IOS_DYNAMIC_FRAMERATE_ENABLED")) { - bool supportsProMotion = false; -#if !TARGET_OS_OSX - supportsProMotion = [UIScreen mainScreen].maximumFramesPerSecond > 60; -#endif // !TARGET_OS_OSX - + bool supportsProMotion = [UIScreen mainScreen].maximumFramesPerSecond > 60; SEL frameCallback = supportsProMotion ? @selector(executeQueueForProMotion:) : @selector(executeQueue:); currentFrameRate_ = supportsProMotion ? FrameRateRange::BEST : FrameRateRange::STANDARD; displayLink_ = [WorkletsDisplayLink displayLinkWithTarget:self selector:frameCallback]; @@ -128,9 +120,7 @@ typedef void (^AnimationFrameCallback)(WorkletsDisplayLink *displayLink); frameRateRange = FrameRateRange::POOR; } if (currentFrameRate_.preferred != frameRateRange.preferred) { -#if !TARGET_OS_OSX displayLink_.preferredFrameRateRange = frameRateRange; -#endif // !TARGET_OS_OSX currentFrameRate_ = frameRateRange; } } diff --git a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AssertTurboModuleManagerQueue.h b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AssertTurboModuleManagerQueue.h index b5c99c35..fc15f7f8 100644 --- a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AssertTurboModuleManagerQueue.h +++ b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/AssertTurboModuleManagerQueue.h @@ -1,12 +1,16 @@ #import -constexpr auto turboModuleManagerQueueLabel = "com.meta.react.turbomodulemanager.queue"; +constexpr auto turboModuleManagerQueueLabel = + "com.meta.react.turbomodulemanager.queue"; static bool IsTurboModuleManagerQueue() { - const auto currentQueueLabel = dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL); + const auto currentQueueLabel = + dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL); return strcmp(currentQueueLabel, turboModuleManagerQueueLabel) == 0; } static void AssertTurboModuleManagerQueue() { - react_native_assert(IsTurboModuleManagerQueue() && "This function must be called on the TurboModuleManager queue"); + react_native_assert( + IsTurboModuleManagerQueue() && + "This function must be called on the TurboModuleManager queue"); } diff --git a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/IOSUIScheduler.h b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/IOSUIScheduler.h index 09b0ce20..19832055 100644 --- a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/IOSUIScheduler.h +++ b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/IOSUIScheduler.h @@ -6,7 +6,8 @@ using namespace facebook; using namespace react; using namespace worklets; -class IOSUIScheduler : public UIScheduler, public std::enable_shared_from_this { +class IOSUIScheduler : public UIScheduler, + public std::enable_shared_from_this { public: void scheduleOnUI(std::function job) override; }; diff --git a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/WorkletsModule.mm b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/WorkletsModule.mm index 66fa2454..69b49a85 100644 --- a/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/WorkletsModule.mm +++ b/frontend-admin/node_modules/react-native-worklets/apple/worklets/apple/WorkletsModule.mm @@ -1,5 +1,4 @@ #import -#import #import #import #import @@ -13,12 +12,8 @@ #import #import -#if __has_include() -// Bundle mode -#import -#endif // __has_include() - -using namespace worklets; +using worklets::RNRuntimeWorkletDecorator; +using worklets::WorkletsModuleProxy; @interface RCTBridge (JSIRuntime) - (void *)runtime; @@ -28,7 +23,7 @@ using namespace worklets; AnimationFrameQueue *animationFrameQueue_; std::shared_ptr workletsModuleProxy_; #ifndef NDEBUG - SingleInstanceChecker singleInstanceChecker_; + worklets::SingleInstanceChecker singleInstanceChecker_; #endif // NDEBUG } @@ -38,10 +33,11 @@ using namespace worklets; return workletsModuleProxy_; } -#if __has_include() +#if __has_include() // Bundle mode -@synthesize bundleProvider = bundleProvider_; -#endif // __has_include() +@synthesize scriptBuffer = scriptBuffer_; +@synthesize sourceURL = sourceURL_; +#endif // __has_include() - (void)checkBridgeless { @@ -49,7 +45,7 @@ using namespace worklets; react_native_assert(isBridgeless && "[Worklets] react-native-worklets only supports bridgeless mode"); } -@synthesize callInvoker = callInvoker_; +@synthesize callInvoker = _callInvoker; RCT_EXPORT_MODULE(WorkletsModule); @@ -63,28 +59,36 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(installTurboModule) jsi::Runtime &rnRuntime = *reinterpret_cast(self.bridge.runtime); - auto jsQueue = - std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { throw error; }); + auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { + throw error; + }); std::string sourceURL = ""; - std::shared_ptr script = nullptr; + std::shared_ptr script = nullptr; #ifdef WORKLETS_BUNDLE_MODE - script = [bundleProvider_ getBundle]; - sourceURL = [[bundleProvider_ getSourceURL] UTF8String]; + script = [scriptBuffer_ getBuffer]; + sourceURL = [sourceURL_ UTF8String]; #endif // WORKLETS_BUNDLE_MODE - auto jsCallInvoker = callInvoker_.callInvoker; - auto uiScheduler = std::make_shared(); - auto isJavaScriptQueue = []() -> bool { - return IsJavaScriptQueue(); - }; + auto jsCallInvoker = _callInvoker.callInvoker; + auto uiScheduler = std::make_shared(); + auto isJavaScriptQueue = []() -> bool { return IsJavaScriptQueue(); }; animationFrameQueue_ = [AnimationFrameQueue new]; - auto runtimeBindings = [self getRuntimeBindings]; - + auto forwardedRequestAnimationFrame = std::function)>( + [animationFrameQueue = animationFrameQueue_](std::function callback) { + [animationFrameQueue requestAnimationFrame:callback]; + }); workletsModuleProxy_ = std::make_shared( - rnRuntime, jsQueue, jsCallInvoker, uiScheduler, std::move(isJavaScriptQueue), runtimeBindings, script, sourceURL); + rnRuntime, + jsQueue, + jsCallInvoker, + uiScheduler, + std::move(isJavaScriptQueue), + std::move(forwardedRequestAnimationFrame), + script, + sourceURL); auto jsiWorkletsModuleProxy = workletsModuleProxy_->createJSIWorkletsModuleProxy(); - auto optimizedJsiWorkletsModuleProxy = jsi_utils::optimizedFromHostObject( + auto optimizedJsiWorkletsModuleProxy = worklets::jsi_utils::optimizedFromHostObject( rnRuntime, std::static_pointer_cast(std::move(jsiWorkletsModuleProxy))); RNRuntimeWorkletDecorator::decorate( rnRuntime, std::move(optimizedJsiWorkletsModuleProxy), workletsModuleProxy_->getJSLogger()); @@ -114,13 +118,4 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(installTurboModule) return std::make_shared(params); } -- (RuntimeBindings)getRuntimeBindings -{ - return { - .requestAnimationFrame = [animationFrameQueue = - animationFrameQueue_](std::function &&callback) -> void { - [animationFrameQueue requestAnimationFrame:callback]; - }}; -} - @end diff --git a/frontend-admin/node_modules/react-native-worklets/bundleMode/index.js b/frontend-admin/node_modules/react-native-worklets/bundleMode/index.js index 25512b58..22d5aa38 100644 --- a/frontend-admin/node_modules/react-native-worklets/bundleMode/index.js +++ b/frontend-admin/node_modules/react-native-worklets/bundleMode/index.js @@ -5,35 +5,15 @@ const workletsPackageParentDir = path.resolve(__dirname, '../..'); const defaults = getDefaultConfig(__dirname); -function getEntryPoints() { - const entryPoints = []; - try { - entryPoints.push( - require.resolve( - 'react-native-worklets/src/initializers/workletRuntimeEntry.native.ts' - ) - ); - } catch { - /* empty */ - } - try { - entryPoints.push( - require.resolve( - 'react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js' - ) - ); - } catch { - /* empty */ - } - return entryPoints; -} - module.exports = { bundleModeMetroConfig: { serializer: { getModulesRunBeforeMainModule(/** @type {string} dirname */ dirname) { return [ - ...getEntryPoints(), + require.resolve('react-native-worklets/src/workletRuntimeEntry.ts'), + require.resolve( + 'react-native-worklets/lib/module/workletRuntimeEntry.js' + ), ...defaults.serializer.getModulesRunBeforeMainModule(dirname), ]; }, diff --git a/frontend-admin/node_modules/react-native-worklets/compatibility.json b/frontend-admin/node_modules/react-native-worklets/compatibility.json index 965bb91d..523807fc 100644 --- a/frontend-admin/node_modules/react-native-worklets/compatibility.json +++ b/frontend-admin/node_modules/react-native-worklets/compatibility.json @@ -1,12 +1,6 @@ { "nightly": { - "react-native": ["0.79", "0.80", "0.81", "0.82"] - }, - "0.7.x": { - "react-native": ["0.79", "0.80", "0.81", "0.82", "0.83"] - }, - "0.6.x": { - "react-native": ["0.78", "0.79", "0.80", "0.81", "0.82"] + "react-native": ["0.78", "0.79", "0.80", "0.81"] }, "0.5.x": { "react-native": ["0.78", "0.79", "0.80", "0.81"] diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js b/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js index 3569cad0..7581ae27 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js @@ -1,4 +1,126 @@ 'use strict'; -export const WorkletsModule = null; +import { RuntimeKind } from "../runtimeKind.js"; +import { WorkletsTurboModule } from "../specs/index.js"; +import { checkCppVersion } from "../utils/checkCppVersion.js"; +import { jsVersion } from "../utils/jsVersion.js"; +import { WorkletsError } from "../WorkletsError.js"; +export function createNativeWorkletsModule() { + return new NativeWorklets(); +} +class NativeWorklets { + #workletsModuleProxy; + #serializableUndefined; + #serializableNull; + #serializableTrue; + #serializableFalse; + constructor() { + globalThis._WORKLETS_VERSION_JS = jsVersion; + if (global.__workletsModuleProxy === undefined && globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { + WorkletsTurboModule?.installTurboModule(); + } + if (global.__workletsModuleProxy === undefined) { + throw new WorkletsError(`Native part of Worklets doesn't seem to be initialized. +See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#native-part-of-worklets-doesnt-seem-to-be-initialized for more details.`); + } + if (__DEV__) { + checkCppVersion(); + } + this.#workletsModuleProxy = global.__workletsModuleProxy; + this.#serializableNull = this.#workletsModuleProxy.createSerializableNull(); + this.#serializableUndefined = this.#workletsModuleProxy.createSerializableUndefined(); + this.#serializableTrue = this.#workletsModuleProxy.createSerializableBoolean(true); + this.#serializableFalse = this.#workletsModuleProxy.createSerializableBoolean(false); + } + createSerializable(value, shouldPersistRemote, nativeStateSource) { + return this.#workletsModuleProxy.createSerializable(value, shouldPersistRemote, nativeStateSource); + } + createSerializableImport(from, to) { + return this.#workletsModuleProxy.createSerializableImport(from, to); + } + createSerializableString(str) { + return this.#workletsModuleProxy.createSerializableString(str); + } + createSerializableNumber(num) { + return this.#workletsModuleProxy.createSerializableNumber(num); + } + createSerializableBoolean(bool) { + return bool ? this.#serializableTrue : this.#serializableFalse; + } + createSerializableBigInt(bigInt) { + return this.#workletsModuleProxy.createSerializableBigInt(bigInt); + } + createSerializableUndefined() { + return this.#serializableUndefined; + } + createSerializableNull() { + return this.#serializableNull; + } + createSerializableTurboModuleLike(props, proto) { + return this.#workletsModuleProxy.createSerializableTurboModuleLike(props, proto); + } + createSerializableObject(obj, shouldRetainRemote, nativeStateSource) { + return this.#workletsModuleProxy.createSerializableObject(obj, shouldRetainRemote, nativeStateSource); + } + createSerializableHostObject(obj) { + return this.#workletsModuleProxy.createSerializableHostObject(obj); + } + createSerializableArray(array, shouldRetainRemote) { + return this.#workletsModuleProxy.createSerializableArray(array, shouldRetainRemote); + } + createSerializableMap(keys, values) { + return this.#workletsModuleProxy.createSerializableMap(keys, values); + } + createSerializableSet(values) { + return this.#workletsModuleProxy.createSerializableSet(values); + } + createSerializableInitializer(obj) { + return this.#workletsModuleProxy.createSerializableInitializer(obj); + } + createSerializableFunction(func) { + return this.#workletsModuleProxy.createSerializableFunction(func); + } + createSerializableWorklet(worklet, shouldPersistRemote) { + return this.#workletsModuleProxy.createSerializableWorklet(worklet, shouldPersistRemote); + } + scheduleOnUI(serializable) { + return this.#workletsModuleProxy.scheduleOnUI(serializable); + } + executeOnUIRuntimeSync(serializable) { + return this.#workletsModuleProxy.executeOnUIRuntimeSync(serializable); + } + createWorkletRuntime(name, initializer, useDefaultQueue, customQueue, enableEventLoop) { + return this.#workletsModuleProxy.createWorkletRuntime(name, initializer, useDefaultQueue, customQueue, enableEventLoop); + } + scheduleOnRuntime(workletRuntime, serializableWorklet) { + return this.#workletsModuleProxy.scheduleOnRuntime(workletRuntime, serializableWorklet); + } + createSynchronizable(value) { + return this.#workletsModuleProxy.createSynchronizable(value); + } + synchronizableGetDirty(synchronizableRef) { + return this.#workletsModuleProxy.synchronizableGetDirty(synchronizableRef); + } + synchronizableGetBlocking(synchronizableRef) { + return this.#workletsModuleProxy.synchronizableGetBlocking(synchronizableRef); + } + synchronizableSetBlocking(synchronizableRef, value) { + return this.#workletsModuleProxy.synchronizableSetBlocking(synchronizableRef, value); + } + synchronizableLock(synchronizableRef) { + return this.#workletsModuleProxy.synchronizableLock(synchronizableRef); + } + synchronizableUnlock(synchronizableRef) { + return this.#workletsModuleProxy.synchronizableUnlock(synchronizableRef); + } + reportFatalErrorOnJS(message, stack, name, jsEngine) { + return this.#workletsModuleProxy.reportFatalErrorOnJS(message, stack, name, jsEngine); + } + getStaticFeatureFlag(name) { + return this.#workletsModuleProxy.getStaticFeatureFlag(name); + } + setDynamicFeatureFlag(name, value) { + this.#workletsModuleProxy.setDynamicFeatureFlag(name, value); + } +} //# sourceMappingURL=NativeWorklets.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js.map index a8378e6b..4f064991 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.js.map @@ -1 +1 @@ -{"version":3,"names":["WorkletsModule"],"sourceRoot":"../../../src","sources":["WorkletsModule/NativeWorklets.ts"],"mappings":"AAAA,YAAY;;AASZ,OAAO,MAAMA,cAA+B,GAAG,IAAK","ignoreList":[]} +{"version":3,"names":["RuntimeKind","WorkletsTurboModule","checkCppVersion","jsVersion","WorkletsError","createNativeWorkletsModule","NativeWorklets","workletsModuleProxy","serializableUndefined","serializableNull","serializableTrue","serializableFalse","constructor","globalThis","_WORKLETS_VERSION_JS","global","__workletsModuleProxy","undefined","__RUNTIME_KIND","ReactNative","installTurboModule","__DEV__","createSerializableNull","createSerializableUndefined","createSerializableBoolean","createSerializable","value","shouldPersistRemote","nativeStateSource","createSerializableImport","from","to","createSerializableString","str","createSerializableNumber","num","bool","createSerializableBigInt","bigInt","createSerializableTurboModuleLike","props","proto","createSerializableObject","obj","shouldRetainRemote","createSerializableHostObject","createSerializableArray","array","createSerializableMap","keys","values","createSerializableSet","createSerializableInitializer","createSerializableFunction","func","createSerializableWorklet","worklet","scheduleOnUI","serializable","executeOnUIRuntimeSync","createWorkletRuntime","name","initializer","useDefaultQueue","customQueue","enableEventLoop","scheduleOnRuntime","workletRuntime","serializableWorklet","createSynchronizable","synchronizableGetDirty","synchronizableRef","synchronizableGetBlocking","synchronizableSetBlocking","synchronizableLock","synchronizableUnlock","reportFatalErrorOnJS","message","stack","jsEngine","getStaticFeatureFlag","setDynamicFeatureFlag"],"sourceRoot":"../../../src","sources":["WorkletsModule/NativeWorklets.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js deleted file mode 100644 index f0bd231c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict'; - -import { checkCppVersion } from '../debug/checkCppVersion'; -import { jsVersion } from '../debug/jsVersion'; -import { WorkletsError } from '../debug/WorkletsError'; -import { RuntimeKind } from '../runtimeKind'; -import { WorkletsTurboModule } from '../specs'; -class NativeWorklets { - #workletsModuleProxy; - #serializableUndefined; - #serializableNull; - #serializableTrue; - #serializableFalse; - constructor() { - globalThis._WORKLETS_VERSION_JS = jsVersion; - if (global.__workletsModuleProxy === undefined && globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { - WorkletsTurboModule?.installTurboModule(); - } - if (global.__workletsModuleProxy === undefined) { - throw new WorkletsError(`Native part of Worklets doesn't seem to be initialized. -See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#native-part-of-worklets-doesnt-seem-to-be-initialized for more details.`); - } - if (__DEV__ && globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { - checkCppVersion(); - } - this.#workletsModuleProxy = global.__workletsModuleProxy; - this.#serializableNull = this.#workletsModuleProxy.createSerializableNull(); - this.#serializableUndefined = this.#workletsModuleProxy.createSerializableUndefined(); - this.#serializableTrue = this.#workletsModuleProxy.createSerializableBoolean(true); - this.#serializableFalse = this.#workletsModuleProxy.createSerializableBoolean(false); - } - createSerializable(value, shouldPersistRemote, nativeStateSource) { - return this.#workletsModuleProxy.createSerializable(value, shouldPersistRemote, nativeStateSource); - } - createSerializableImport(from, to) { - return this.#workletsModuleProxy.createSerializableImport(from, to); - } - createSerializableString(str) { - return this.#workletsModuleProxy.createSerializableString(str); - } - createSerializableNumber(num) { - return this.#workletsModuleProxy.createSerializableNumber(num); - } - createSerializableBoolean(bool) { - return bool ? this.#serializableTrue : this.#serializableFalse; - } - createSerializableBigInt(bigInt) { - return this.#workletsModuleProxy.createSerializableBigInt(bigInt); - } - createSerializableUndefined() { - return this.#serializableUndefined; - } - createSerializableNull() { - return this.#serializableNull; - } - createSerializableTurboModuleLike(props, proto) { - return this.#workletsModuleProxy.createSerializableTurboModuleLike(props, proto); - } - createSerializableObject(obj, shouldRetainRemote, nativeStateSource) { - return this.#workletsModuleProxy.createSerializableObject(obj, shouldRetainRemote, nativeStateSource); - } - createSerializableHostObject(obj) { - return this.#workletsModuleProxy.createSerializableHostObject(obj); - } - createSerializableArray(array, shouldRetainRemote) { - return this.#workletsModuleProxy.createSerializableArray(array, shouldRetainRemote); - } - createSerializableMap(keys, values) { - return this.#workletsModuleProxy.createSerializableMap(keys, values); - } - createSerializableSet(values) { - return this.#workletsModuleProxy.createSerializableSet(values); - } - createSerializableInitializer(obj) { - return this.#workletsModuleProxy.createSerializableInitializer(obj); - } - createSerializableFunction(func) { - return this.#workletsModuleProxy.createSerializableFunction(func); - } - createSerializableWorklet(worklet, shouldPersistRemote) { - return this.#workletsModuleProxy.createSerializableWorklet(worklet, shouldPersistRemote); - } - createCustomSerializable(data, typeId) { - return this.#workletsModuleProxy.createCustomSerializable(data, typeId); - } - registerCustomSerializable(determine, pack, unpack, typeId) { - this.#workletsModuleProxy.registerCustomSerializable(determine, pack, unpack, typeId); - } - scheduleOnUI(serializable) { - return this.#workletsModuleProxy.scheduleOnUI(serializable); - } - executeOnUIRuntimeSync(serializable) { - return this.#workletsModuleProxy.executeOnUIRuntimeSync(serializable); - } - createWorkletRuntime(name, initializer, useDefaultQueue, customQueue, enableEventLoop) { - return this.#workletsModuleProxy.createWorkletRuntime(name, initializer, useDefaultQueue, customQueue, enableEventLoop); - } - scheduleOnRuntime(workletRuntime, serializableWorklet) { - return this.#workletsModuleProxy.scheduleOnRuntime(workletRuntime, serializableWorklet); - } - createSynchronizable(value) { - return this.#workletsModuleProxy.createSynchronizable(value); - } - synchronizableGetDirty(synchronizableRef) { - return this.#workletsModuleProxy.synchronizableGetDirty(synchronizableRef); - } - synchronizableGetBlocking(synchronizableRef) { - return this.#workletsModuleProxy.synchronizableGetBlocking(synchronizableRef); - } - synchronizableSetBlocking(synchronizableRef, value) { - return this.#workletsModuleProxy.synchronizableSetBlocking(synchronizableRef, value); - } - synchronizableLock(synchronizableRef) { - return this.#workletsModuleProxy.synchronizableLock(synchronizableRef); - } - synchronizableUnlock(synchronizableRef) { - return this.#workletsModuleProxy.synchronizableUnlock(synchronizableRef); - } - reportFatalErrorOnJS(message, stack, name, jsEngine) { - return this.#workletsModuleProxy.reportFatalErrorOnJS(message, stack, name, jsEngine); - } - getStaticFeatureFlag(name) { - return this.#workletsModuleProxy.getStaticFeatureFlag(name); - } - setDynamicFeatureFlag(name, value) { - this.#workletsModuleProxy.setDynamicFeatureFlag(name, value); - } -} -export const WorkletsModule = new NativeWorklets(); -//# sourceMappingURL=NativeWorklets.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js.map deleted file mode 100644 index 38b2d13a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/WorkletsModule/NativeWorklets.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["checkCppVersion","jsVersion","WorkletsError","RuntimeKind","WorkletsTurboModule","NativeWorklets","workletsModuleProxy","serializableUndefined","serializableNull","serializableTrue","serializableFalse","constructor","globalThis","_WORKLETS_VERSION_JS","global","__workletsModuleProxy","undefined","__RUNTIME_KIND","ReactNative","installTurboModule","__DEV__","createSerializableNull","createSerializableUndefined","createSerializableBoolean","createSerializable","value","shouldPersistRemote","nativeStateSource","createSerializableImport","from","to","createSerializableString","str","createSerializableNumber","num","bool","createSerializableBigInt","bigInt","createSerializableTurboModuleLike","props","proto","createSerializableObject","obj","shouldRetainRemote","createSerializableHostObject","createSerializableArray","array","createSerializableMap","keys","values","createSerializableSet","createSerializableInitializer","createSerializableFunction","func","createSerializableWorklet","worklet","createCustomSerializable","data","typeId","registerCustomSerializable","determine","pack","unpack","scheduleOnUI","serializable","executeOnUIRuntimeSync","createWorkletRuntime","name","initializer","useDefaultQueue","customQueue","enableEventLoop","scheduleOnRuntime","workletRuntime","serializableWorklet","createSynchronizable","synchronizableGetDirty","synchronizableRef","synchronizableGetBlocking","synchronizableSetBlocking","synchronizableLock","synchronizableUnlock","reportFatalErrorOnJS","message","stack","jsEngine","getStaticFeatureFlag","setDynamicFeatureFlag","WorkletsModule"],"sourceRoot":"../../../src","sources":["WorkletsModule/NativeWorklets.native.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js deleted file mode 100644 index 2cc1234b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -/** Used only with debug builds. */ -export function callGuardDEV(fn, ...args) { - 'worklet'; - - try { - return fn(...args); - } catch (error) { - if (globalThis.__workletsModuleProxy) { - const { - message, - stack, - name, - jsEngine - } = error; - globalThis.__workletsModuleProxy.reportFatalErrorOnJS(message, stack ?? '', name ?? 'WorkletsError', jsEngine ?? 'Worklets'); - } else { - throw error; - } - } -} -export function setupCallGuard() { - 'worklet'; - - if (!globalThis.__callGuardDEV) { - globalThis.__callGuardDEV = callGuardDEV; - } -} -//# sourceMappingURL=callGuard.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js.map deleted file mode 100644 index 7548bd2a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/callGuard.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["callGuardDEV","fn","args","error","globalThis","__workletsModuleProxy","message","stack","name","jsEngine","reportFatalErrorOnJS","setupCallGuard","__callGuardDEV"],"sourceRoot":"../../src","sources":["callGuard.native.ts"],"mappings":"AAAA,YAAY;;AAIZ;AACA,OAAO,SAASA,YAAYA,CAC1BC,EAAkC,EAClC,GAAGC,IAAU,EACO;EACpB,SAAS;;EACT,IAAI;IACF,OAAOD,EAAE,CAAC,GAAGC,IAAI,CAAC;EACpB,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,IAAIC,UAAU,CAACC,qBAAqB,EAAE;MACpC,MAAM;QAAEC,OAAO;QAAEC,KAAK;QAAEC,IAAI;QAAEC;MAAS,CAAC,GAAGN,KAAgB;MAC3DC,UAAU,CAACC,qBAAqB,CAACK,oBAAoB,CACnDJ,OAAO,EACPC,KAAK,IAAI,EAAE,EACXC,IAAI,IAAI,eAAe,EACvBC,QAAQ,IAAI,UACd,CAAC;IACH,CAAC,MAAM;MACL,MAAMN,KAAK;IACb;EACF;AACF;AAEA,OAAO,SAASQ,cAAcA,CAAA,EAAG;EAC/B,SAAS;;EACT,IAAI,CAACP,UAAU,CAACQ,cAAc,EAAE;IAC9BR,UAAU,CAACQ,cAAc,GAAGZ,YAAY;EAC1C;AACF","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js deleted file mode 100644 index def6933c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -function WorkletsErrorConstructor(message) { - const prefix = '[Worklets]'; - - // eslint-disable-next-line reanimated/use-worklets-error - const errorInstance = new Error(message ? `${prefix} ${message}` : prefix); - errorInstance.name = `WorkletsError`; - return errorInstance; -} -export const WorkletsError = WorkletsErrorConstructor; -//# sourceMappingURL=WorkletsError.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js.map deleted file mode 100644 index d9f9169c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsErrorConstructor","message","prefix","errorInstance","Error","name","WorkletsError"],"sourceRoot":"../../../src","sources":["debug/WorkletsError.ts"],"mappings":"AAAA,YAAY;;AAOZ,SAASA,wBAAwBA,CAACC,OAAgB,EAAkB;EAClE,MAAMC,MAAM,GAAG,YAAY;;EAE3B;EACA,MAAMC,aAAa,GAAG,IAAIC,KAAK,CAACH,OAAO,GAAG,GAAGC,MAAM,IAAID,OAAO,EAAE,GAAGC,MAAM,CAAC;EAC1EC,aAAa,CAACE,IAAI,GAAG,eAAe;EACpC,OAAOF,aAAa;AACtB;AAEA,OAAO,MAAMG,aAAa,GACxBN,wBAAqD","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js deleted file mode 100644 index d62ba78d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -import { RuntimeKind } from '../runtimeKind'; -function WorkletsErrorConstructor(message) { - 'worklet'; - - const prefix = '[Worklets]'; - - // eslint-disable-next-line reanimated/use-worklets-error - const errorInstance = new Error(message ? `${prefix} ${message}` : prefix); - errorInstance.name = `WorkletsError`; - return errorInstance; -} - -/** - * Registers WorkletsError in the global scope. Register only for Worklet - * runtimes. - */ -export function registerWorkletsError() { - 'worklet'; - - if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - globalThis.WorkletsError = WorkletsErrorConstructor; - } -} -export const WorkletsError = WorkletsErrorConstructor; -//# sourceMappingURL=WorkletsError.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js.map deleted file mode 100644 index 5a14742e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/WorkletsError.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["RuntimeKind","WorkletsErrorConstructor","message","prefix","errorInstance","Error","name","registerWorkletsError","globalThis","__RUNTIME_KIND","ReactNative","WorkletsError"],"sourceRoot":"../../../src","sources":["debug/WorkletsError.native.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,WAAW,QAAQ,gBAAgB;AAM5C,SAASC,wBAAwBA,CAACC,OAAgB,EAAkB;EAClE,SAAS;;EACT,MAAMC,MAAM,GAAG,YAAY;;EAE3B;EACA,MAAMC,aAAa,GAAG,IAAIC,KAAK,CAACH,OAAO,GAAG,GAAGC,MAAM,IAAID,OAAO,EAAE,GAAGC,MAAM,CAAC;EAC1EC,aAAa,CAACE,IAAI,GAAG,eAAe;EACpC,OAAOF,aAAa;AACtB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,qBAAqBA,CAAA,EAAG;EACtC,SAAS;;EACT,IAAKC,UAAU,CAACC,cAAc,KAAqBT,WAAW,CAACU,WAAW,EAAE;IACzEF,UAAU,CAA6BG,aAAa,GACnDV,wBAAwB;EAC5B;AACF;AAEA,OAAO,MAAMU,aAAa,GACxBV,wBAAqD","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js deleted file mode 100644 index ae170b9c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -import { jsVersion } from './jsVersion'; -import { logger } from './logger'; -import { WorkletsError } from './WorkletsError'; -export function checkCppVersion() { - const cppVersion = global._WORKLETS_VERSION_CPP; - if (cppVersion === undefined) { - logger.warn(`Couldn't determine the version of the native part of Worklets. - See \`https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#couldnt-determine-the-version-of-the-native-part-of-worklets\` for more details.`); - return; - } - const ok = matchVersion(jsVersion, cppVersion); - if (!ok) { - throw new WorkletsError(`Mismatch between JavaScript part and native part of Worklets (${jsVersion} vs ${cppVersion}). - See \`https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#mismatch-between-javascript-part-and-native-part-of-worklets\` for more details.`); - } -} -export function matchVersion(version1, version2) { - if (version1.match(/^\d+\.\d+\.\d+$/) && version2.match(/^\d+\.\d+\.\d+$/)) { - // x.y.z, compare only major and minor, skip patch - const [major1, minor1] = version1.split('.'); - const [major2, minor2] = version2.split('.'); - return major1 === major2 && minor1 === minor2; - } else { - // alpha, beta or rc, compare everything - return version1 === version2; - } -} -//# sourceMappingURL=checkCppVersion.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js.map deleted file mode 100644 index 217010df..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/checkCppVersion.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["jsVersion","logger","WorkletsError","checkCppVersion","cppVersion","global","_WORKLETS_VERSION_CPP","undefined","warn","ok","matchVersion","version1","version2","match","major1","minor1","split","major2","minor2"],"sourceRoot":"../../../src","sources":["debug/checkCppVersion.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,OAAO,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,UAAU,GAAGC,MAAM,CAACC,qBAAqB;EAC/C,IAAIF,UAAU,KAAKG,SAAS,EAAE;IAC5BN,MAAM,CAACO,IAAI,CACT;AACN,wKACI,CAAC;IACD;EACF;EACA,MAAMC,EAAE,GAAGC,YAAY,CAACV,SAAS,EAAEI,UAAU,CAAC;EAC9C,IAAI,CAACK,EAAE,EAAE;IACP,MAAM,IAAIP,aAAa,CACrB,iEAAiEF,SAAS,OAAOI,UAAU;AACjG,wKACI,CAAC;EACH;AACF;AAEA,OAAO,SAASM,YAAYA,CAACC,QAAgB,EAAEC,QAAgB,EAAE;EAC/D,IAAID,QAAQ,CAACE,KAAK,CAAC,iBAAiB,CAAC,IAAID,QAAQ,CAACC,KAAK,CAAC,iBAAiB,CAAC,EAAE;IAC1E;IACA,MAAM,CAACC,MAAM,EAAEC,MAAM,CAAC,GAAGJ,QAAQ,CAACK,KAAK,CAAC,GAAG,CAAC;IAC5C,MAAM,CAACC,MAAM,EAAEC,MAAM,CAAC,GAAGN,QAAQ,CAACI,KAAK,CAAC,GAAG,CAAC;IAC5C,OAAOF,MAAM,KAAKG,MAAM,IAAIF,MAAM,KAAKG,MAAM;EAC/C,CAAC,MAAM;IACL;IACA,OAAOP,QAAQ,KAAKC,QAAQ;EAC9B;AACF","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js deleted file mode 100644 index d6f7688d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -import { WorkletsError } from './WorkletsError'; -const _workletStackDetails = new Map(); -export function registerWorkletStackDetails(hash, stackDetails) { - _workletStackDetails.set(hash, stackDetails); -} -function getBundleOffset(error) { - const frame = error.stack?.split('\n')?.[0]; - if (frame) { - const parsedFrame = /@([^@]+):(\d+):(\d+)/.exec(frame); - if (parsedFrame) { - const [, file, line, col] = parsedFrame; - return [file, Number(line), Number(col)]; - } - } - return ['unknown', 0, 0]; -} -function processStack(stack) { - if (stack === '' || stack === undefined) { - return undefined; - } - const workletStackEntries = stack.match(/worklet_(\d+):(\d+):(\d+)/g); - let result = stack; - workletStackEntries?.forEach(match => { - const [, hash, origLine, origCol] = match.split(/:|_/).map(Number); - const errorDetails = _workletStackDetails.get(hash); - if (!errorDetails) { - return; - } - const [error, lineOffset, colOffset] = errorDetails; - const [bundleFile, bundleLine, bundleCol] = getBundleOffset(error); - const line = origLine + bundleLine + lineOffset; - const col = origCol + bundleCol + colOffset; - result = result.replace(match, `${bundleFile}:${line}:${col}`); - }); - return result; -} -/** - * Remote error is an error coming from a Worklet Runtime that we bubble up to - * the RN Runtime. - */ -export function reportFatalRemoteError({ - message, - stack, - name, - jsEngine -}, force) { - const error = new WorkletsError(); - error.message = message; - error.stack = processStack(stack); - error.name = name; - error.jsEngine = jsEngine; - if (force) { - throw error; - } else { - // @ts-expect-error React Native's `ErrorUtils` are hidden from the global scope. - globalThis.ErrorUtils.reportFatalError(error); - } -} - -/** - * Registers `reportFatalRemoteError` function in global scope to allow to - * invoke it from C++. - */ -export function registerReportFatalRemoteError() { - globalThis.__reportFatalRemoteError = reportFatalRemoteError; -} -//# sourceMappingURL=errors.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js.map deleted file mode 100644 index 77ab5397..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/errors.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsError","_workletStackDetails","Map","registerWorkletStackDetails","hash","stackDetails","set","getBundleOffset","error","frame","stack","split","parsedFrame","exec","file","line","col","Number","processStack","undefined","workletStackEntries","match","result","forEach","origLine","origCol","map","errorDetails","get","lineOffset","colOffset","bundleFile","bundleLine","bundleCol","replace","reportFatalRemoteError","message","name","jsEngine","force","globalThis","ErrorUtils","reportFatalError","registerReportFatalRemoteError","__reportFatalRemoteError"],"sourceRoot":"../../../src","sources":["debug/errors.native.ts"],"mappings":"AAAA,YAAY;;AAGZ,SAASA,aAAa,QAAQ,iBAAiB;AAE/C,MAAMC,oBAAoB,GAAG,IAAIC,GAAG,CAA8B,CAAC;AAEnE,OAAO,SAASC,2BAA2BA,CACzCC,IAAY,EACZC,YAAiC,EACjC;EACAJ,oBAAoB,CAACK,GAAG,CAACF,IAAI,EAAEC,YAAY,CAAC;AAC9C;AAEA,SAASE,eAAeA,CAACC,KAAY,EAA4B;EAC/D,MAAMC,KAAK,GAAGD,KAAK,CAACE,KAAK,EAAEC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC3C,IAAIF,KAAK,EAAE;IACT,MAAMG,WAAW,GAAG,sBAAsB,CAACC,IAAI,CAACJ,KAAK,CAAC;IACtD,IAAIG,WAAW,EAAE;MACf,MAAM,GAAGE,IAAI,EAAEC,IAAI,EAAEC,GAAG,CAAC,GAAGJ,WAAW;MACvC,OAAO,CAACE,IAAI,EAAEG,MAAM,CAACF,IAAI,CAAC,EAAEE,MAAM,CAACD,GAAG,CAAC,CAAC;IAC1C;EACF;EACA,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B;AAEA,SAASE,YAAYA,CAACR,KAAc,EAAsB;EACxD,IAAIA,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAKS,SAAS,EAAE;IACvC,OAAOA,SAAS;EAClB;EACA,MAAMC,mBAAmB,GAAGV,KAAK,CAACW,KAAK,CAAC,4BAA4B,CAAC;EACrE,IAAIC,MAAM,GAAGZ,KAAK;EAClBU,mBAAmB,EAAEG,OAAO,CAAEF,KAAK,IAAK;IACtC,MAAM,GAAGjB,IAAI,EAAEoB,QAAQ,EAAEC,OAAO,CAAC,GAAGJ,KAAK,CAACV,KAAK,CAAC,KAAK,CAAC,CAACe,GAAG,CAACT,MAAM,CAAC;IAClE,MAAMU,YAAY,GAAG1B,oBAAoB,CAAC2B,GAAG,CAACxB,IAAI,CAAC;IACnD,IAAI,CAACuB,YAAY,EAAE;MACjB;IACF;IACA,MAAM,CAACnB,KAAK,EAAEqB,UAAU,EAAEC,SAAS,CAAC,GAAGH,YAAY;IACnD,MAAM,CAACI,UAAU,EAAEC,UAAU,EAAEC,SAAS,CAAC,GAAG1B,eAAe,CAACC,KAAK,CAAC;IAClE,MAAMO,IAAI,GAAGS,QAAQ,GAAGQ,UAAU,GAAGH,UAAU;IAC/C,MAAMb,GAAG,GAAGS,OAAO,GAAGQ,SAAS,GAAGH,SAAS;IAE3CR,MAAM,GAAGA,MAAM,CAACY,OAAO,CAACb,KAAK,EAAE,GAAGU,UAAU,IAAIhB,IAAI,IAAIC,GAAG,EAAE,CAAC;EAChE,CAAC,CAAC;EACF,OAAOM,MAAM;AACf;AAMA;AACA;AACA;AACA;AACA,OAAO,SAASa,sBAAsBA,CACpC;EAAEC,OAAO;EAAE1B,KAAK;EAAE2B,IAAI;EAAEC;AAAkB,CAAC,EAC3CC,KAAc,EACR;EACN,MAAM/B,KAAK,GAAG,IAAIR,aAAa,CAAC,CAAY;EAC5CQ,KAAK,CAAC4B,OAAO,GAAGA,OAAO;EACvB5B,KAAK,CAACE,KAAK,GAAGQ,YAAY,CAACR,KAAK,CAAC;EACjCF,KAAK,CAAC6B,IAAI,GAAGA,IAAI;EACjB7B,KAAK,CAAC8B,QAAQ,GAAGA,QAAQ;EACzB,IAAIC,KAAK,EAAE;IACT,MAAM/B,KAAK;EACb,CAAC,MAAM;IACL;IACAgC,UAAU,CAACC,UAAU,CAACC,gBAAgB,CAAClC,KAAK,CAAC;EAC/C;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASmC,8BAA8BA,CAAA,EAAG;EAC/CH,UAAU,CAACI,wBAAwB,GAAGT,sBAAsB;AAC9D","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js deleted file mode 100644 index 33cb12ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -/** - * We hardcode the version of Worklets here in order to compare it with the - * version used to build the native part of the library in runtime. Remember to - * keep this in sync with the version declared in `package.json` - */ -export const jsVersion = '0.7.2'; -//# sourceMappingURL=jsVersion.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js.map deleted file mode 100644 index 43439678..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/jsVersion.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["jsVersion"],"sourceRoot":"../../../src","sources":["debug/jsVersion.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,SAAS,GAAG,OAAO","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js deleted file mode 100644 index 4c412c35..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const PREFIX = '[Worklets]'; -function formatMessage(message) { - return `${PREFIX} ${message}`; -} -export const logger = { - warn(message) { - console.warn(formatMessage(message)); - }, - error(message) { - console.error(formatMessage(message)); - } -}; -//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js.map deleted file mode 100644 index 89b7dc3b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/logger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["PREFIX","formatMessage","message","logger","warn","console","error"],"sourceRoot":"../../../src","sources":["debug/logger.ts"],"mappings":"AAAA,YAAY;;AAEZ,MAAMA,MAAM,GAAG,YAAY;AAE3B,SAASC,aAAaA,CAACC,OAAe,EAAE;EACtC,OAAO,GAAGF,MAAM,IAAIE,OAAO,EAAE;AAC/B;AAEA,OAAO,MAAMC,MAAM,GAAG;EACpBC,IAAIA,CAACF,OAAe,EAAE;IACpBG,OAAO,CAACD,IAAI,CAACH,aAAa,CAACC,OAAO,CAAC,CAAC;EACtC,CAAC;EACDI,KAAKA,CAACJ,OAAe,EAAE;IACrBG,OAAO,CAACC,KAAK,CAACL,aAAa,CAACC,OAAO,CAAC,CAAC;EACvC;AACF,CAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js deleted file mode 100644 index 6e4bb72f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js.map deleted file mode 100644 index 2f0f7e28..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/debug/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":[],"sourceRoot":"../../../src","sources":["debug/types.ts"],"mappings":"AAAA,YAAY","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js b/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js index d899365a..45e230aa 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js @@ -1,7 +1,7 @@ 'use strict'; -import { createSerializable, isSerializableRef, makeShareable, makeShareableCloneOnUIRecursive } from './memory/serializable'; -import { serializableMappingCache } from './memory/serializableMappingCache'; +import { createSerializable, isSerializableRef, makeShareable, makeShareableCloneOnUIRecursive } from "./serializable.js"; +import { serializableMappingCache } from "./serializableMappingCache.js"; /** @deprecated Use {@link SerializableRef} instead. */ diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js.map index 2eafd349..4695c2e0 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/deprecated.js.map @@ -1 +1 @@ -{"version":3,"names":["createSerializable","isSerializableRef","makeShareable","makeShareableCloneOnUIRecursive","serializableMappingCache","makeShareableCloneRecursive","isShareableRef","shareableMappingCache"],"sourceRoot":"../../src","sources":["deprecated.ts"],"mappings":"AAAA,YAAY;;AAEZ,SACEA,kBAAkB,EAClBC,iBAAiB,EACjBC,aAAa,EACbC,+BAA+B,QAC1B,uBAAuB;AAC9B,SAASC,wBAAwB,QAAQ,mCAAmC;;AAG5E;;AAGA,SAASF,aAAa,EAAEC,+BAA+B;;AAEvD;;AAOA;AACA,OAAO,MAAME,2BAA+C,GAC1DL,kBAAkB;;AAEpB;AACA,OAAO,MAAMM,cAAc,GAAGL,iBAAiB;;AAE/C;AACA,OAAO,MAAMM,qBAAqB,GAAGH,wBAAwB","ignoreList":[]} +{"version":3,"names":["createSerializable","isSerializableRef","makeShareable","makeShareableCloneOnUIRecursive","serializableMappingCache","makeShareableCloneRecursive","isShareableRef","shareableMappingCache"],"sourceRoot":"../../src","sources":["deprecated.ts"],"mappings":"AAAA,YAAY;;AAEZ,SACEA,kBAAkB,EAClBC,iBAAiB,EACjBC,aAAa,EACbC,+BAA+B,QAC1B,mBAAgB;AACvB,SAASC,wBAAwB,QAAQ,+BAA4B;;AAGrE;;AAGA,SAASF,aAAa,EAAEC,+BAA+B;;AAEvD;;AAOA;AACA,OAAO,MAAME,2BAA+C,GAC1DL,kBAAkB;;AAEpB;AACA,OAAO,MAAMM,cAAc,GAAGL,iBAAiB;;AAE/C;AACA,OAAO,MAAMM,qBAAqB,GAAGH,wBAAwB","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js b/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js deleted file mode 100644 index 26e3bef7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -export function getStaticFeatureFlag(_name) { - return false; -} -export function setDynamicFeatureFlag(_name, _value) { - // no-op -} -export function getDynamicFeatureFlag(_name) { - return false; -} -//# sourceMappingURL=featureFlags.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js.map deleted file mode 100644 index 125f4eb2..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["getStaticFeatureFlag","_name","setDynamicFeatureFlag","_value","getDynamicFeatureFlag"],"sourceRoot":"../../../src","sources":["featureFlags/featureFlags.ts"],"mappings":"AAAA,YAAY;;AAIZ,OAAO,SAASA,oBAAoBA,CAClCC,KAAqC,EAC5B;EACT,OAAO,KAAK;AACd;AAEA,OAAO,SAASC,qBAAqBA,CACnCD,KAAsB,EACtBE,MAAe,EACT;EACN;AAAA;AAGF,OAAO,SAASC,qBAAqBA,CAACH,KAAsB,EAAW;EACrE,OAAO,KAAK;AACd","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js deleted file mode 100644 index 5b9c1024..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -import { logger } from '../debug/logger'; -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -export const DynamicFlags = { - EXAMPLE_DYNAMIC_FLAG: true, - init() { - Object.keys(DynamicFlags).forEach(key => { - if (key !== 'init' && key !== 'setFlag' && key !== 'getFlag') { - WorkletsModule.setDynamicFeatureFlag(key, DynamicFlags[key]); - } - }); - }, - setFlag(name, value) { - if (name in DynamicFlags) { - DynamicFlags[name] = value; - WorkletsModule.setDynamicFeatureFlag(name, value); - } else { - logger.warn(`The feature flag: '${name}' no longer exists, you can safely remove invocation of \`setDynamicFeatureFlag('${name}')\` from your code.`); - } - }, - getFlag(name) { - if (name in DynamicFlags) { - return DynamicFlags[name]; - } else { - logger.warn(`The feature flag: '${name}' no longer exists, you can safely remove invocation of \`getDynamicFeatureFlag('${name}')\` from your code.`); - return false; - } - } -}; -DynamicFlags.init(); - -// Public API function to update a feature flag -export function setDynamicFeatureFlag(name, value) { - DynamicFlags.setFlag(name, value); -} - -// Public API function to read a feature flag -export function getDynamicFeatureFlag(name) { - return DynamicFlags.getFlag(name); -} -const staticFeatureFlags = {}; -export function getStaticFeatureFlag(name) { - if (name in staticFeatureFlags) { - return staticFeatureFlags[name]; - } - const featureFlagValue = WorkletsModule.getStaticFeatureFlag(name); - staticFeatureFlags[name] = featureFlagValue; - return featureFlagValue; -} -//# sourceMappingURL=featureFlags.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js.map deleted file mode 100644 index 9734e9f0..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/featureFlags.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["logger","WorkletsModule","DynamicFlags","EXAMPLE_DYNAMIC_FLAG","init","Object","keys","forEach","key","setDynamicFeatureFlag","setFlag","name","value","warn","getFlag","getDynamicFeatureFlag","staticFeatureFlags","getStaticFeatureFlag","featureFlagValue"],"sourceRoot":"../../../src","sources":["featureFlags/featureFlags.native.ts"],"mappings":"AAAA,YAAY;;AACZ,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SAASC,cAAc,QAAQ,kCAAkC;AAOjE,OAAO,MAAMC,YAA8B,GAAG;EAC5CC,oBAAoB,EAAE,IAAI;EAE1BC,IAAIA,CAAA,EAAG;IACLC,MAAM,CAACC,IAAI,CAACJ,YAAY,CAAC,CAACK,OAAO,CAAEC,GAAG,IAAK;MACzC,IAAIA,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,SAAS,IAAIA,GAAG,KAAK,SAAS,EAAE;QAC5DP,cAAc,CAACQ,qBAAqB,CAClCD,GAAG,EACHN,YAAY,CAACM,GAAG,CAClB,CAAC;MACH;IACF,CAAC,CAAC;EACJ,CAAC;EACDE,OAAOA,CAACC,IAAI,EAAEC,KAAK,EAAE;IACnB,IAAID,IAAI,IAAIT,YAAY,EAAE;MACxBA,YAAY,CAACS,IAAI,CAAC,GAAGC,KAAK;MAC1BX,cAAc,CAACQ,qBAAqB,CAACE,IAAI,EAAEC,KAAK,CAAC;IACnD,CAAC,MAAM;MACLZ,MAAM,CAACa,IAAI,CACT,sBAAsBF,IAAI,oFAAoFA,IAAI,sBACpH,CAAC;IACH;EACF,CAAC;EACDG,OAAOA,CAACH,IAAI,EAAE;IACZ,IAAIA,IAAI,IAAIT,YAAY,EAAE;MACxB,OAAOA,YAAY,CAACS,IAAI,CAAC;IAC3B,CAAC,MAAM;MACLX,MAAM,CAACa,IAAI,CACT,sBAAsBF,IAAI,oFAAoFA,IAAI,sBACpH,CAAC;MACD,OAAO,KAAK;IACd;EACF;AACF,CAAC;AACDT,YAAY,CAACE,IAAI,CAAC,CAAC;;AAEnB;AACA,OAAO,SAASK,qBAAqBA,CACnCE,IAAqB,EACrBC,KAAc,EACR;EACNV,YAAY,CAACQ,OAAO,CAACC,IAAI,EAAEC,KAAK,CAAC;AACnC;;AAEA;AACA,OAAO,SAASG,qBAAqBA,CAACJ,IAAqB,EAAW;EACpE,OAAOT,YAAY,CAACY,OAAO,CAACH,IAAI,CAAC;AACnC;AAEA,MAAMK,kBAAqD,GAAG,CAAC,CAAC;AAEhE,OAAO,SAASC,oBAAoBA,CAClCN,IAAoC,EAC3B;EACT,IAAIA,IAAI,IAAIK,kBAAkB,EAAE;IAC9B,OAAOA,kBAAkB,CAACL,IAAI,CAAC;EACjC;EACA,MAAMO,gBAAgB,GAAGjB,cAAc,CAACgB,oBAAoB,CAACN,IAAI,CAAC;EAClEK,kBAAkB,CAACL,IAAI,CAAC,GAAGO,gBAAgB;EAC3C,OAAOA,gBAAgB;AACzB","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js b/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js deleted file mode 100644 index 8e6f1bd1..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/** - * This constant is needed for typechecking and preserving static typechecks in - * generated .d.ts files. Without it, the static flags resolve to an object - * without specific keys. - */ -export const DefaultStaticFeatureFlags = { - RUNTIME_TEST_FLAG: false, - IOS_DYNAMIC_FRAMERATE_ENABLED: false -}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js.map deleted file mode 100644 index d4149cfd..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/featureFlags/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["DefaultStaticFeatureFlags","RUNTIME_TEST_FLAG","IOS_DYNAMIC_FRAMERATE_ENABLED"],"sourceRoot":"../../../src","sources":["featureFlags/types.ts"],"mappings":"AAAA,YAAY;;AAgBZ;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,yBAAyB,GAAG;EACvCC,iBAAiB,EAAE,KAAK;EACxBC,6BAA6B,EAAE;AACjC,CAAkD","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/index.js b/frontend-admin/node_modules/react-native-worklets/lib/module/index.js index e8519747..a1f74615 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/index.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/index.js @@ -1,26 +1,26 @@ 'use strict'; -import { init } from './initializers/initializers'; -import { bundleModeInit } from './initializers/workletRuntimeEntry'; +import "./publicGlobals.js"; +import { init } from "./initializers.js"; +import { bundleModeInit } from "./workletRuntimeEntry.js"; init(); - +export { isShareableRef, makeShareable, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive, shareableMappingCache } from "./deprecated.js"; +export { getStaticFeatureFlag, setDynamicFeatureFlag } from "./featureFlags/index.js"; +export { isSynchronizable } from "./isSynchronizable.js"; +export { getRuntimeKind, RuntimeKind } from "./runtimeKind.js"; +export { createWorkletRuntime, runOnRuntime } from "./runtimes.js"; +export { createSerializable, isSerializableRef } from "./serializable.js"; +export { serializableMappingCache } from "./serializableMappingCache.js"; +export { createSynchronizable } from "./synchronizable.js"; +export { callMicrotasks, executeOnUIRuntimeSync, runOnJS, runOnUI, runOnUIAsync, runOnUISync, scheduleOnRN, scheduleOnUI, +// eslint-disable-next-line camelcase +unstable_eventLoopTask } from "./threads.js"; +export { isWorkletFunction } from "./workletFunction.js"; +export { WorkletsModule } from "./WorkletsModule/index.js"; // @ts-expect-error We must trick the bundler to include // the `workletRuntimeEntry` file the way it cannot optimize it out. if (globalThis._ALWAYS_FALSE) { // Bundle mode. bundleModeInit(); } -export { isShareableRef, makeShareable, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive, shareableMappingCache } from './deprecated'; -export { getDynamicFeatureFlag, getStaticFeatureFlag, setDynamicFeatureFlag } from './featureFlags/featureFlags'; -export { isSynchronizable } from './memory/isSynchronizable'; -export { createSerializable, isSerializableRef, registerCustomSerializable } from './memory/serializable'; -export { serializableMappingCache } from './memory/serializableMappingCache'; -export { createSynchronizable } from './memory/synchronizable'; -export { getRuntimeKind, RuntimeKind } from './runtimeKind'; -export { createWorkletRuntime, runOnRuntime, scheduleOnRuntime } from './runtimes'; -export { callMicrotasks, executeOnUIRuntimeSync, runOnJS, runOnUI, runOnUIAsync, runOnUISync, scheduleOnRN, scheduleOnUI, -// eslint-disable-next-line camelcase -unstable_eventLoopTask } from './threads'; -export { isWorkletFunction } from './workletFunction'; -export { WorkletsModule } from './WorkletsModule/NativeWorklets'; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/index.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/index.js.map index 48ec7a15..633273ce 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/index.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/index.js.map @@ -1 +1 @@ -{"version":3,"names":["init","bundleModeInit","globalThis","_ALWAYS_FALSE","isShareableRef","makeShareable","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","shareableMappingCache","getDynamicFeatureFlag","getStaticFeatureFlag","setDynamicFeatureFlag","isSynchronizable","createSerializable","isSerializableRef","registerCustomSerializable","serializableMappingCache","createSynchronizable","getRuntimeKind","RuntimeKind","createWorkletRuntime","runOnRuntime","scheduleOnRuntime","callMicrotasks","executeOnUIRuntimeSync","runOnJS","runOnUI","runOnUIAsync","runOnUISync","scheduleOnRN","scheduleOnUI","unstable_eventLoopTask","isWorkletFunction","WorkletsModule"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,IAAI,QAAQ,6BAA6B;AAClD,SAASC,cAAc,QAAQ,oCAAoC;AAEnED,IAAI,CAAC,CAAC;;AAEN;AACA;AACA,IAAIE,UAAU,CAACC,aAAa,EAAE;EAC5B;EACAF,cAAc,CAAC,CAAC;AAClB;AAEA,SACEG,cAAc,EACdC,aAAa,EAEbC,+BAA+B,EAC/BC,2BAA2B,EAC3BC,qBAAqB,QAEhB,cAAc;AACrB,SACEC,qBAAqB,EACrBC,oBAAoB,EACpBC,qBAAqB,QAChB,6BAA6B;AACpC,SAASC,gBAAgB,QAAQ,2BAA2B;AAC5D,SACEC,kBAAkB,EAClBC,iBAAiB,EACjBC,0BAA0B,QACrB,uBAAuB;AAC9B,SAASC,wBAAwB,QAAQ,mCAAmC;AAC5E,SAASC,oBAAoB,QAAQ,yBAAyB;AAO9D,SAASC,cAAc,EAAEC,WAAW,QAAQ,eAAe;AAC3D,SACEC,oBAAoB,EACpBC,YAAY,EACZC,iBAAiB,QACZ,YAAY;AACnB,SACEC,cAAc,EACdC,sBAAsB,EACtBC,OAAO,EACPC,OAAO,EACPC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,YAAY;AACZ;AACAC,sBAAsB,QACjB,WAAW;AAMlB,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,cAAc,QAAQ,iCAAiC","ignoreList":[]} +{"version":3,"names":["init","bundleModeInit","isShareableRef","makeShareable","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","shareableMappingCache","getStaticFeatureFlag","setDynamicFeatureFlag","isSynchronizable","getRuntimeKind","RuntimeKind","createWorkletRuntime","runOnRuntime","createSerializable","isSerializableRef","serializableMappingCache","createSynchronizable","callMicrotasks","executeOnUIRuntimeSync","runOnJS","runOnUI","runOnUIAsync","runOnUISync","scheduleOnRN","scheduleOnUI","unstable_eventLoopTask","isWorkletFunction","WorkletsModule","globalThis","_ALWAYS_FALSE"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,oBAAiB;AAExB,SAASA,IAAI,QAAQ,mBAAgB;AACrC,SAASC,cAAc,QAAQ,0BAAuB;AAEtDD,IAAI,CAAC,CAAC;AAGN,SACEE,cAAc,EACdC,aAAa,EACbC,+BAA+B,EAC/BC,2BAA2B,EAC3BC,qBAAqB,QAChB,iBAAc;AACrB,SAASC,oBAAoB,EAAEC,qBAAqB,QAAQ,yBAAgB;AAC5E,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,cAAc,EAAEC,WAAW,QAAQ,kBAAe;AAC3D,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,eAAY;AAC/D,SAASC,kBAAkB,EAAEC,iBAAiB,QAAQ,mBAAgB;AACtE,SAASC,wBAAwB,QAAQ,+BAA4B;AAErE,SAASC,oBAAoB,QAAQ,qBAAkB;AACvD,SACEC,cAAc,EACdC,sBAAsB,EACtBC,OAAO,EACPC,OAAO,EACPC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,YAAY;AACZ;AACAC,sBAAsB,QACjB,cAAW;AAClB,SAASC,iBAAiB,QAAQ,sBAAmB;AAErD,SAASC,cAAc,QAAQ,2BAAkB;AAQjD;AACA;AACA,IAAIC,UAAU,CAACC,aAAa,EAAE;EAC5B;EACA7B,cAAc,CAAC,CAAC;AAClB","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js deleted file mode 100644 index 4a8576b5..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -import { IS_JEST } from '../platformChecker'; -import { mockedRequestAnimationFrame } from '../runLoop/uiRuntime/mockedRequestAnimationFrame'; -import { RuntimeKind } from '../runtimeKind'; -export function init() { - globalThis._WORKLET = false; - globalThis.__RUNTIME_KIND = RuntimeKind.ReactNative; - globalThis._log = console.log; - globalThis._getAnimationTimestamp = () => performance.now(); - if (IS_JEST) { - // requestAnimationFrame react-native jest's setup is incorrect as it polyfills - // the method directly using setTimeout, therefore the callback doesn't get the - // expected timestamp as the only argument: https://github.com/facebook/react-native/blob/main/packages/react-native/jest/setup.js#L28 - // We override this setup here to make sure that callbacks get the proper timestamps - // when executed. For non-jest environments we define requestAnimationFrame in setupRequestAnimationFrame - // @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number - globalThis.requestAnimationFrame = mockedRequestAnimationFrame; - } -} -//# sourceMappingURL=initializers.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js.map deleted file mode 100644 index c1bf7ac8..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["IS_JEST","mockedRequestAnimationFrame","RuntimeKind","init","globalThis","_WORKLET","__RUNTIME_KIND","ReactNative","_log","console","log","_getAnimationTimestamp","performance","now","requestAnimationFrame"],"sourceRoot":"../../../src","sources":["initializers/initializers.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,2BAA2B,QAAQ,kDAAkD;AAC9F,SAASC,WAAW,QAAQ,gBAAgB;AAE5C,OAAO,SAASC,IAAIA,CAAA,EAAG;EACrBC,UAAU,CAACC,QAAQ,GAAG,KAAK;EAC3BD,UAAU,CAACE,cAAc,GAAGJ,WAAW,CAACK,WAAW;EACnDH,UAAU,CAACI,IAAI,GAAGC,OAAO,CAACC,GAAG;EAC7BN,UAAU,CAACO,sBAAsB,GAAG,MAAMC,WAAW,CAACC,GAAG,CAAC,CAAC;EAC3D,IAAIb,OAAO,EAAE;IACX;IACA;IACA;IACA;IACA;IACA;IACAI,UAAU,CAACU,qBAAqB,GAAGb,2BAA2B;EAChE;AACF","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js deleted file mode 100644 index c41e64ad..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js +++ /dev/null @@ -1,198 +0,0 @@ -'use strict'; - -import { setupCallGuard } from '../callGuard'; -import { registerReportFatalRemoteError } from '../debug/errors'; -import { registerWorkletsError, WorkletsError } from '../debug/WorkletsError'; -import { bundleValueUnpacker } from '../memory/bundleUnpacker'; -import { __installUnpacker as installCustomSerializableUnpacker } from '../memory/customSerializableUnpacker'; -import { __installUnpacker as installSynchronizableUnpacker } from '../memory/synchronizableUnpacker'; -import { setupSetImmediate } from '../runLoop/common/setImmediatePolyfill'; -import { setupSetInterval } from '../runLoop/common/setIntervalPolyfill'; -import { setupRequestAnimationFrame } from '../runLoop/uiRuntime/requestAnimationFrame'; -import { setupSetTimeout } from '../runLoop/uiRuntime/setTimeoutPolyfill'; -import { RuntimeKind } from '../runtimeKind'; -import { runOnUISync, scheduleOnRN, setupMicrotasks } from '../threads'; -import { isWorkletFunction } from '../workletFunction'; -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -if (globalThis.__RUNTIME_KIND === undefined) { - // The only runtime that doesn't have `__RUNTIME_KIND` preconfigured - // is the RN Runtime. We must set it as soon as possible. - globalThis.__RUNTIME_KIND = RuntimeKind.ReactNative; -} -let capturableConsole; - -/** - * Currently there seems to be a bug in the JSI layer which causes a crash when - * we try to copy some of the console methods, i.e. `clear` or `dirxml`. - * - * The crash happens only in React Native 0.75. It's not reproducible in neither - * 0.76 nor 0.74. It also happens only in the configuration of a debug app and - * production bundle. - * - * I haven't yet discovered what exactly causes the crash. It's tied to the - * console methods sometimes being `HostFunction`s. Therefore, as a workaround - * we don't copy the methods as they are in the original console object, we copy - * JavaScript wrappers instead. - */ -export function getMemorySafeCapturableConsole() { - if (capturableConsole) { - return capturableConsole; - } - const consoleCopy = Object.fromEntries(Object.entries(console).map(([methodName, method]) => { - const methodWrapper = function methodWrapper(...args) { - return method(...args); - }; - if (method.name) { - /** - * Set the original method name as the wrapper name if available. - * - * It might be unnecessary but if we want to fully mimic the console - * object we should take into the account the fact some code might rely - * on the method name. - */ - Object.defineProperty(methodWrapper, 'name', { - value: method.name, - writable: false - }); - } - return [methodName, methodWrapper]; - })); - capturableConsole = consoleCopy; - return consoleCopy; -} -export function setupConsole(boundCapturableConsole) { - 'worklet'; - - // @ts-ignore TypeScript doesn't like that there are missing methods in console object, but we don't provide all the methods for the UI runtime console version - globalThis.console = { - assert: (...args) => scheduleOnRN(boundCapturableConsole.assert, ...args), - debug: (...args) => scheduleOnRN(boundCapturableConsole.debug, ...args), - log: (...args) => scheduleOnRN(boundCapturableConsole.log, ...args), - warn: (...args) => scheduleOnRN(boundCapturableConsole.warn, ...args), - error: (...args) => scheduleOnRN(boundCapturableConsole.error, ...args), - info: (...args) => scheduleOnRN(boundCapturableConsole.info, ...args) - }; -} -let initialized = false; -export function init() { - if (initialized) { - return; - } - initialized = true; - initializeRuntime(); - if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - initializeWorkletRuntime(); - } else { - initializeRNRuntime(); - installRNBindingsOnUIRuntime(); - } -} - -/** A function that should be run on any kind of runtime. */ -function initializeRuntime() { - if (globalThis._WORKLETS_BUNDLE_MODE) { - globalThis.__valueUnpacker = bundleValueUnpacker; - } - installSynchronizableUnpacker(); - installCustomSerializableUnpacker(); -} - -/** A function that should be run only on React Native runtime. */ -function initializeRNRuntime() { - if (__DEV__) { - const testWorklet = () => { - 'worklet'; - }; - if (!isWorkletFunction(testWorklet)) { - throw new WorkletsError(`Failed to create a worklet. See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#failed-to-create-a-worklet for more details.`); - } - } - registerReportFatalRemoteError(); -} - -/** A function that should be run only on Worklet runtimes. */ -function initializeWorkletRuntime() { - if (globalThis._WORKLETS_BUNDLE_MODE) { - setupCallGuard(); - if (__DEV__) { - /* - * Temporary workaround for Metro bundler. We must implement a dummy - * Refresh module to prevent Metro from throwing irrelevant errors. - */ - const Refresh = new Proxy({}, { - get() { - return () => {}; - } - }); - globalThis.__r.Refresh = Refresh; - - /* Gracefully handle unwanted imports from React Native. */ - const modules = require.getModules(); - const ReactNativeModuleId = require.resolveWeak('react-native'); - const factory = function (_global, _require, _importDefault, _importAll, module, _exports, _dependencyMap) { - module.exports = new Proxy({}, { - get: function get(_target, prop) { - globalThis.console.warn(`You tried to import '${String(prop)}' from 'react-native' module on a Worklet Runtime. Using 'react-native' module on a Worklet Runtime is not allowed.`); - return { - get() { - return undefined; - } - }; - } - }); - }; - const mod = { - dependencyMap: [], - factory, - hasError: false, - importedAll: {}, - importedDefault: {}, - isInitialized: false, - publicModule: { - exports: {} - } - }; - modules.set(ReactNativeModuleId, mod); - } - } -} - -/** - * A function that should be run on the RN Runtime to configure the UI Runtime - * with callback bindings. - */ -function installRNBindingsOnUIRuntime() { - if (!WorkletsModule) { - throw new WorkletsError('Worklets are trying to initialize the UI runtime without a valid WorkletsModule'); - } - const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole(); - if (!globalThis._WORKLETS_BUNDLE_MODE) { - /** In bundle mode Runtimes setup their callGuard themselves. */ - runOnUISync(setupCallGuard); - - /** - * Register WorkletsError in the UI runtime global scope. (we are using - * `executeOnUIRuntimeSync` here to make sure that the changes are applied - * before any async operations are executed on the UI runtime). - * - * There's no need to register the error in bundle mode. - */ - runOnUISync(registerWorkletsError); - } - runOnUISync(() => { - 'worklet'; - - setupConsole(runtimeBoundCapturableConsole); - /** - * TODO: Move `setupMicrotasks` and `setupRequestAnimationFrame` to a - * separate function once we have a better way to distinguish between - * Worklet Runtimes. - */ - setupMicrotasks(); - setupRequestAnimationFrame(); - setupSetTimeout(); - setupSetImmediate(); - setupSetInterval(); - }); -} -//# sourceMappingURL=initializers.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js.map deleted file mode 100644 index bffc0ed2..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/initializers.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["setupCallGuard","registerReportFatalRemoteError","registerWorkletsError","WorkletsError","bundleValueUnpacker","__installUnpacker","installCustomSerializableUnpacker","installSynchronizableUnpacker","setupSetImmediate","setupSetInterval","setupRequestAnimationFrame","setupSetTimeout","RuntimeKind","runOnUISync","scheduleOnRN","setupMicrotasks","isWorkletFunction","WorkletsModule","globalThis","__RUNTIME_KIND","undefined","ReactNative","capturableConsole","getMemorySafeCapturableConsole","consoleCopy","Object","fromEntries","entries","console","map","methodName","method","methodWrapper","args","name","defineProperty","value","writable","setupConsole","boundCapturableConsole","assert","debug","log","warn","error","info","initialized","init","initializeRuntime","initializeWorkletRuntime","initializeRNRuntime","installRNBindingsOnUIRuntime","_WORKLETS_BUNDLE_MODE","__valueUnpacker","__DEV__","testWorklet","Refresh","Proxy","get","__r","modules","require","getModules","ReactNativeModuleId","resolveWeak","factory","_global","_require","_importDefault","_importAll","module","_exports","_dependencyMap","exports","_target","prop","String","mod","dependencyMap","hasError","importedAll","importedDefault","isInitialized","publicModule","set","runtimeBoundCapturableConsole"],"sourceRoot":"../../../src","sources":["initializers/initializers.native.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js deleted file mode 100644 index 8ab8bbfd..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -export function bundleModeInit() { - // no-op -} -//# sourceMappingURL=workletRuntimeEntry.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js.map deleted file mode 100644 index 18dfce37..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["bundleModeInit"],"sourceRoot":"../../../src","sources":["initializers/workletRuntimeEntry.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,SAASA,cAAcA,CAAA,EAAG;EAC/B;AAAA","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js deleted file mode 100644 index 8a6691e0..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -import { WorkletsError } from '../debug/WorkletsError'; -import { RuntimeKind } from '../runtimeKind'; -import { init } from './initializers'; - -/** - * This function is an entry point for Worklet Runtimes. We can use it to setup - * necessary tools, like the ValueUnpacker. - * - * We must throw an error at the end of this function to prevent the bundle to - * continue executing. This is because the next module to be ran would be the - * React Native one, and it would break the Worklet Runtime if initialized. The - * error is caught in C++ code. - * - * This function has no effect on the RN Runtime beside setting the - * `_WORKLETS_BUNDLE_MODE` flag. - */ -export function bundleModeInit() { - // Worklets Babel Plugin replaces `false` with `true` here - // when Bundle Mode is enabled. - globalThis._WORKLETS_BUNDLE_MODE = false; - if (!globalThis._WORKLETS_BUNDLE_MODE) { - return; - } - const runtimeKind = globalThis.__RUNTIME_KIND; - if (runtimeKind && runtimeKind !== RuntimeKind.ReactNative) { - /** - * We shouldn't call `init()` on RN Runtime here, as it would initialize our - * module before React Native has configured the RN Runtime. - */ - init(); - throw new WorkletsError('Worklets initialized successfully'); - } -} -bundleModeInit(); -//# sourceMappingURL=workletRuntimeEntry.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js.map deleted file mode 100644 index b7af4385..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/initializers/workletRuntimeEntry.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsError","RuntimeKind","init","bundleModeInit","globalThis","_WORKLETS_BUNDLE_MODE","runtimeKind","__RUNTIME_KIND","ReactNative"],"sourceRoot":"../../../src","sources":["initializers/workletRuntimeEntry.native.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,IAAI,QAAQ,gBAAgB;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B;EACA;EACAC,UAAU,CAACC,qBAAqB,GAAG,KAAK;EAExC,IAAI,CAACD,UAAU,CAACC,qBAAqB,EAAE;IACrC;EACF;EAEA,MAAMC,WAAW,GAAGF,UAAU,CAACG,cAAc;EAC7C,IAAID,WAAW,IAAIA,WAAW,KAAKL,WAAW,CAACO,WAAW,EAAE;IAC1D;AACJ;AACA;AACA;IACIN,IAAI,CAAC,CAAC;IACN,MAAM,IAAIF,aAAa,CAAC,mCAAmC,CAAC;EAC9D;AACF;AAEAG,cAAc,CAAC,CAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js deleted file mode 100644 index 6cb9aebd..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -import { logger } from '../debug/logger'; -import { WorkletsError } from '../debug/WorkletsError'; -const handleCache = new WeakMap(); -export function bundleValueUnpacker(objectToUnpack, category, remoteFunctionName) { - const workletHash = objectToUnpack.__workletHash; - if (workletHash !== undefined) { - return getWorklet(workletHash, objectToUnpack.__closure); - } else if (objectToUnpack.__init !== undefined) { - let value = handleCache.get(objectToUnpack); - if (value === undefined) { - value = objectToUnpack.__init(); - handleCache.set(objectToUnpack, value); - } - return value; - } else if (category === 'RemoteFunction') { - const remoteFunctionHolder = () => { - const label = remoteFunctionName ? `function \`${remoteFunctionName}\`` : 'anonymous function'; - throw new WorkletsError(`Tried to synchronously call a non-worklet ${label} on the UI thread. -See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.`); - }; - remoteFunctionHolder.__remoteFunction = objectToUnpack; - return remoteFunctionHolder; - } else { - throw new WorkletsError(`Data type in category "${category}" not recognized by value unpacker: "${globalThis._toString(objectToUnpack)}".`); - } -} -function getWorklet(workletHash, closureVariables) { - let worklet; - if (__DEV__) { - try { - worklet = getWorkletFromMetroRequire(workletHash, closureVariables); - } catch (_e) { - logger.error('Unable to resolve worklet with hash ' + workletHash + '. Try reloading the app.'); - } - } else { - worklet = getWorkletFromMetroRequire(workletHash, closureVariables); - } - return worklet; -} -const metroRequire = globalThis.__r; -function getWorkletFromMetroRequire(workletHash, closureVariables) { - const factory = metroRequire(workletHash).default; - return factory(closureVariables); -} -//# sourceMappingURL=bundleUnpacker.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js.map deleted file mode 100644 index 235be622..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/bundleUnpacker.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["logger","WorkletsError","handleCache","WeakMap","bundleValueUnpacker","objectToUnpack","category","remoteFunctionName","workletHash","__workletHash","undefined","getWorklet","__closure","__init","value","get","set","remoteFunctionHolder","label","__remoteFunction","globalThis","_toString","closureVariables","worklet","__DEV__","getWorkletFromMetroRequire","_e","error","metroRequire","__r","factory","default"],"sourceRoot":"../../../src","sources":["memory/bundleUnpacker.native.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SAASC,aAAa,QAAQ,wBAAwB;AAGtD,MAAMC,WAAW,GAAG,IAAIC,OAAO,CAA2B,CAAC;AAE3D,OAAO,SAASC,mBAAmBA,CACjCC,cAA8B,EAC9BC,QAAiB,EACjBC,kBAA2B,EAClB;EACT,MAAMC,WAAW,GAAGH,cAAc,CAACI,aAAa;EAChD,IAAID,WAAW,KAAKE,SAAS,EAAE;IAC7B,OAAOC,UAAU,CAACH,WAAW,EAAEH,cAAc,CAACO,SAAS,CAAC;EAC1D,CAAC,MAAM,IAAIP,cAAc,CAACQ,MAAM,KAAKH,SAAS,EAAE;IAC9C,IAAII,KAAK,GAAGZ,WAAW,CAACa,GAAG,CAACV,cAAc,CAAC;IAC3C,IAAIS,KAAK,KAAKJ,SAAS,EAAE;MACvBI,KAAK,GAAGT,cAAc,CAACQ,MAAM,CAAC,CAAC;MAC/BX,WAAW,CAACc,GAAG,CAACX,cAAc,EAAES,KAAK,CAAC;IACxC;IACA,OAAOA,KAAK;EACd,CAAC,MAAM,IAAIR,QAAQ,KAAK,gBAAgB,EAAE;IACxC,MAAMW,oBAAoB,GAAGA,CAAA,KAAM;MACjC,MAAMC,KAAK,GAAGX,kBAAkB,GAC5B,cAAcA,kBAAkB,IAAI,GACpC,oBAAoB;MACxB,MAAM,IAAIN,aAAa,CAAC,6CAA6CiB,KAAK;AAChF,uKAAuK,CAAC;IACpK,CAAC;IACDD,oBAAoB,CAACE,gBAAgB,GAAGd,cAAc;IACtD,OAAOY,oBAAoB;EAC7B,CAAC,MAAM;IACL,MAAM,IAAIhB,aAAa,CACrB,0BAA0BK,QAAQ,wCAAwCc,UAAU,CAACC,SAAS,CAC5FhB,cACF,CAAC,IACH,CAAC;EACH;AACF;AAEA,SAASM,UAAUA,CACjBH,WAAmB,EACnBc,gBAAyC,EACZ;EAC7B,IAAIC,OAAO;EACX,IAAIC,OAAO,EAAE;IACX,IAAI;MACFD,OAAO,GAAGE,0BAA0B,CAACjB,WAAW,EAAEc,gBAAgB,CAAC;IACrE,CAAC,CAAC,OAAOI,EAAE,EAAE;MACX1B,MAAM,CAAC2B,KAAK,CACV,sCAAsC,GACpCnB,WAAW,GACX,0BACJ,CAAC;IACH;EACF,CAAC,MAAM;IACLe,OAAO,GAAGE,0BAA0B,CAACjB,WAAW,EAAEc,gBAAgB,CAAC;EACrE;EACA,OAAOC,OAAO;AAChB;AAEA,MAAMK,YAAY,GAAGR,UAAU,CAACS,GAAG;AAEnC,SAASJ,0BAA0BA,CACjCjB,WAAmB,EACnBc,gBAAyC,EACxB;EACjB,MAAMQ,OAAO,GAAGF,YAAY,CAACpB,WAAW,CAAC,CAACuB,OAAyB;EACnE,OAAOD,OAAO,CAACR,gBAAgB,CAAC;AAClC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js deleted file mode 100644 index 85fcdfe9..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-disable reanimated/use-worklets-error */ -'use strict'; - -export function __installUnpacker() { - if (!globalThis.__customSerializationRegistry) { - globalThis.__customSerializationRegistry = []; - } - const registry = globalThis.__customSerializationRegistry; - function customSerializableUnpacker(value, typeId) { - const data = registry[typeId]; - if (!data) { - throw new Error(`[Worklets] No custom serializable registered for type ID ${typeId}.`); - } - return data.unpack(value); - } - globalThis.__customSerializableUnpacker = customSerializableUnpacker; -} -//# sourceMappingURL=customSerializableUnpacker.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js.map deleted file mode 100644 index f475b033..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/customSerializableUnpacker.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["__installUnpacker","globalThis","__customSerializationRegistry","registry","customSerializableUnpacker","value","typeId","data","Error","unpack","__customSerializableUnpacker"],"sourceRoot":"../../../src","sources":["memory/customSerializableUnpacker.native.ts"],"mappings":"AAAA;AACA,YAAY;;AAEZ,OAAO,SAASA,iBAAiBA,CAAA,EAAG;EAClC,IAAI,CAACC,UAAU,CAACC,6BAA6B,EAAE;IAC7CD,UAAU,CAACC,6BAA6B,GACtC,EAAqD;EACzD;EACA,MAAMC,QAAQ,GAAGF,UAAU,CAACC,6BAA6B;EAEzD,SAASE,0BAA0BA,CAASC,KAAa,EAAEC,MAAc,EAAE;IACzE,MAAMC,IAAI,GAAGJ,QAAQ,CAACG,MAAM,CAAC;IAC7B,IAAI,CAACC,IAAI,EAAE;MACT,MAAM,IAAIC,KAAK,CACb,4DAA4DF,MAAM,GACpE,CAAC;IACH;IAEA,OAAOC,IAAI,CAACE,MAAM,CAACJ,KAAe,CAAC;EACrC;EAEAJ,UAAU,CAACS,4BAA4B,GACrCN,0BAAwD;AAC5D","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js deleted file mode 100644 index ce6f5032..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -import { WorkletsError } from '../debug/WorkletsError'; -export function isSynchronizable(_value) { - throw new WorkletsError('`isSynchronizable` is not supported on web.'); -} -//# sourceMappingURL=isSynchronizable.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js.map deleted file mode 100644 index 5019c2ab..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsError","isSynchronizable","_value"],"sourceRoot":"../../../src","sources":["memory/isSynchronizable.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,wBAAwB;AAGtD,OAAO,SAASC,gBAAgBA,CAC9BC,MAAe,EACmB;EAClC,MAAM,IAAIF,aAAa,CAAC,6CAA6C,CAAC;AACxE","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js deleted file mode 100644 index dc8b3918..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -export function isSynchronizable(value) { - 'worklet'; - - return typeof value === 'object' && value !== null && '__synchronizableRef' in value && value.__synchronizableRef === true; -} -//# sourceMappingURL=isSynchronizable.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js.map deleted file mode 100644 index 41e041e2..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/isSynchronizable.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["isSynchronizable","value","__synchronizableRef"],"sourceRoot":"../../../src","sources":["memory/isSynchronizable.native.ts"],"mappings":"AAAA,YAAY;;AAIZ,OAAO,SAASA,gBAAgBA,CAC9BC,KAAc,EACmB;EACjC,SAAS;;EACT,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,qBAAqB,IAAIA,KAAK,IAC9BA,KAAK,CAACC,mBAAmB,KAAK,IAAI;AAEtC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js deleted file mode 100644 index 1b55dbab..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -export function isSerializableRef(value) { - return true; -} -export function createSerializable(value) { - return value; -} -export function makeShareableCloneOnUIRecursive(value) { - return value; -} -export function makeShareable(value) { - return value; -} -export function registerCustomSerializable(_registrationData) { - // noop -} -//# sourceMappingURL=serializable.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js.map deleted file mode 100644 index 7d1b45b0..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["isSerializableRef","value","createSerializable","makeShareableCloneOnUIRecursive","makeShareable","registerCustomSerializable","_registrationData"],"sourceRoot":"../../../src","sources":["memory/serializable.ts"],"mappings":"AAAA,YAAY;;AAQZ,OAAO,SAASA,iBAAiBA,CAC/BC,KAAc,EACoB;EAClC,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,kBAAkBA,CAChCD,KAAa,EACY;EACzB,OAAOA,KAAK;AACd;AAEA,OAAO,SAASE,+BAA+BA,CAC7CF,KAAa,EACgB;EAC7B,OAAOA,KAAK;AACd;AAEA,OAAO,SAASG,aAAaA,CAASH,KAAa,EAAU;EAC3D,OAAOA,KAAK;AACd;AAEA,OAAO,SAASI,0BAA0BA,CAGxCC,iBAAoD,EAAE;EACtD;AAAA","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js deleted file mode 100644 index 274d5759..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js +++ /dev/null @@ -1,631 +0,0 @@ -'use strict'; - -import { registerWorkletStackDetails } from '../debug/errors'; -import { jsVersion } from '../debug/jsVersion'; -import { logger } from '../debug/logger'; -import { WorkletsError } from '../debug/WorkletsError'; -import { getRuntimeKind, RuntimeKind } from '../runtimeKind'; -import { isWorkletFunction } from '../workletFunction'; -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -import { isSynchronizable } from './isSynchronizable'; -import { serializableMappingCache, serializableMappingFlag } from './serializableMappingCache'; -const MAGIC_KEY = 'REANIMATED_MAGIC_KEY'; -function isHostObject(value) { - 'worklet'; - - // We could use JSI to determine whether an object is a host object, however - // the below workaround works well and is way faster than an additional JSI call. - // We use the fact that host objects have broken implementation of `hasOwnProperty` - // and hence return true for all `in` checks regardless of the key we ask for. - return MAGIC_KEY in value; -} -export function isSerializableRef(value) { - 'worklet'; - - return typeof value === 'object' && value !== null && '__serializableRef' in value && value.__serializableRef === true; -} -function isPlainJSObject(object) { - 'worklet'; - - return Object.getPrototypeOf(object) === Object.prototype; -} -function isTurboModuleLike(object) { - return isHostObject(Object.getPrototypeOf(object)); -} -function getFromCache(value) { - const cached = serializableMappingCache.get(value); - if (cached === serializableMappingFlag) { - // This means that `value` was already a clone and we should return it as is. - return value; - } - return cached; -} - -// The below object is used as a replacement for objects that cannot be transferred -// as serializable values. In createSerializable we detect if an object is of -// a plain Object.prototype and only allow such objects to be transferred. This lets -// us avoid all sorts of react internals from leaking into the UI runtime. To make it -// possible to catch errors when someone actually tries to access such object on the UI -// runtime, we use the below Proxy object which is instantiated on the UI runtime and -// throws whenever someone tries to access its fields. -const INACCESSIBLE_OBJECT = { - __init: () => { - 'worklet'; - - return new Proxy({}, { - get: (_, prop) => { - if (prop === '_isReanimatedSharedValue' || prop === '__remoteFunction' || prop === '__synchronizableRef') { - // not very happy about this check here, but we need to allow for - // "inaccessible" objects to be tested with isSerializableRef check - // as it is being used in the mappers when extracting inputs recursively - // as well as with isRemoteFunction when cloning objects recursively. - // Apparently we can't check if a key exists there as HostObjects always - // return true for such tests, so the only possibility for us is to - // actually access that key and see if it is set to true. We therefore - // need to allow for this key to be accessed here. - return false; - } - throw new WorkletsError(`Trying to access property \`${String(prop)}\` of an object which cannot be sent to the UI runtime.`); - }, - set: () => { - throw new WorkletsError('Trying to write to an object which cannot be sent to the UI runtime.'); - } - }); - } -}; -const VALID_ARRAY_VIEWS_NAMES = ['Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'BigInt64Array', 'BigUint64Array', 'DataView']; -const DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD = 30; -// Below variable stores object that we process in createSerializable at the specified depth. -// We use it to check if later on the function reenters with the same object -let processedObjectAtThresholdDepth; -export function createSerializable(value, shouldPersistRemote = false, depth = 0) { - detectCyclicObject(value, depth); - const isObject = typeof value === 'object'; - const isFunction = typeof value === 'function'; - if (typeof value === 'string') { - return cloneString(value); - } - if (typeof value === 'number') { - return cloneNumber(value); - } - if (typeof value === 'boolean') { - return cloneBoolean(value); - } - if (typeof value === 'bigint') { - return cloneBigInt(value); - } - if (value === undefined) { - return cloneUndefined(); - } - if (value === null) { - return cloneNull(); - } - if (!isObject && !isFunction || value === null) { - return clonePrimitive(value, shouldPersistRemote); - } - const cached = getFromCache(value); - if (cached !== undefined) { - return cached; - } - if (Array.isArray(value)) { - return cloneArray(value, shouldPersistRemote, depth); - } - if (globalThis._WORKLETS_BUNDLE_MODE && isFunction && value.__bundleData) { - return cloneImport(value); - } - if (isFunction && !isWorkletFunction(value)) { - return cloneRemoteFunction(value); - } - // RN has introduced a new representation of TurboModules as a JS object whose prototype is the host object - // More details: https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp#L182 - if (isTurboModuleLike(value)) { - return cloneTurboModuleLike(value, shouldPersistRemote, depth); - } - if (isHostObject(value)) { - return cloneHostObject(value); - } - if (isPlainJSObject(value) && value.__init) { - return cloneInitializer(value, shouldPersistRemote, depth); - } - if (isPlainJSObject(value) && value.__workletContextObjectFactory) { - return cloneContextObject(value); - } - if ((isPlainJSObject(value) || isFunction) && isWorkletFunction(value)) { - return cloneWorklet(value, shouldPersistRemote, depth); - } - if (isSynchronizable(value)) { - return cloneSynchronizable(value); - } - if (isPlainJSObject(value) || isFunction) { - return clonePlainJSObject(value, shouldPersistRemote, depth); - } - if (value instanceof Set) { - return cloneSet(value); - } - if (value instanceof Map) { - return cloneMap(value); - } - if (value instanceof RegExp) { - return cloneRegExp(value); - } - if (value instanceof Error) { - return cloneError(value); - } - if (value instanceof ArrayBuffer) { - return cloneArrayBuffer(value, shouldPersistRemote); - } - if (ArrayBuffer.isView(value)) { - // typed array (e.g. Int32Array, Uint8ClampedArray) or DataView - return cloneArrayBufferView(value); - } - for (let i = 0; i < customSerializationRegistry.length; i++) { - const { - determine, - pack - } = customSerializationRegistry[i]; - if (determine(value)) { - return cloneCustom(value, pack, i); - } - } - return inaccessibleObject(value); -} -if (globalThis._WORKLETS_BUNDLE_MODE) { - // TODO: Do it programmatically. - createSerializable.__bundleData = { - imported: 'createSerializable', - source: require.resolveWeak('react-native-worklets') - }; -} -if (!globalThis.__customSerializationRegistry) { - globalThis.__customSerializationRegistry = []; -} -const customSerializationRegistry = globalThis.__customSerializationRegistry; - -/** - * `registerCustomSerializable` lets you register your own pre-serialization and - * post-deserialization logic. This is necessary for objects with prototypes - * different than just `Object.prototype` or some other built-in prototypes like - * `Map` etc. Worklets can't handle such objects by default to convert into - * [Serializables](https://docs.swmansion.com/react-native-worklets/docs/memory/serializable) - * hence you need to register them as **Custom Serializables**. This way you can - * tell Worklets how to transfer your custom data structures between different - * Runtimes without manually serializing and deserializing them every time. - * - * @param registrationData - The registration data for the custom serializable - - * {@link RegistrationData} - * @see https://docs.swmansion.com/react-native-worklets/docs/memory/registerCustomSerializable/ - */ -export function registerCustomSerializable(registrationData) { - if (__DEV__ && getRuntimeKind() !== RuntimeKind.ReactNative) { - throw new WorkletsError('registerCustomSerializable can be used only on React Native runtime.'); - } - const { - name, - determine, - pack, - unpack - } = registrationData; - if (__DEV__) { - verifyRegistrationData(determine, pack, unpack); - } - if (customSerializationRegistry.some(data => data.name === name)) { - if (__DEV__) { - console.warn(`Custom serializable with name "${name}" is already registered. Duplicate registration is ignored.`); - } - return; - } - customSerializationRegistry.push(registrationData); - WorkletsModule.registerCustomSerializable(createSerializable(determine), createSerializable(pack), createSerializable(unpack), customSerializationRegistry.length - 1); -} -function verifyRegistrationData(determine, pack, unpack) { - if (!isWorkletFunction(determine)) { - throw new WorkletsError('The "determine" function provided to registerCustomSerializable must be a worklet.'); - } - if (!isWorkletFunction(pack)) { - throw new WorkletsError('The "pack" function provided to registerCustomSerializable must be a worklet.'); - } - if (!isWorkletFunction(unpack)) { - throw new WorkletsError('The "unpack" function provided to registerCustomSerializable must be a worklet.'); - } -} -function detectCyclicObject(value, depth) { - if (depth >= DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) { - // if we reach certain recursion depth we suspect that we are dealing with a cyclic object. - // this type of objects are not supported and cannot be transferred as serializable, so we - // implement a simple detection mechanism that remembers the value at a given depth and - // tests whether we try reenter this method later on with the same value. If that happens - // we throw an appropriate error. - if (depth === DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) { - processedObjectAtThresholdDepth = value; - } else if (value === processedObjectAtThresholdDepth) { - throw new WorkletsError('Trying to convert a cyclic object to a serializable. This is not supported.'); - } - } else { - processedObjectAtThresholdDepth = undefined; - } -} -function clonePrimitive(value, shouldPersistRemote) { - return WorkletsModule.createSerializable(value, shouldPersistRemote); -} -function cloneString(value) { - return WorkletsModule.createSerializableString(value); -} -function cloneNumber(value) { - return WorkletsModule.createSerializableNumber(value); -} -function cloneBoolean(value) { - return WorkletsModule.createSerializableBoolean(value); -} -function cloneBigInt(value) { - return WorkletsModule.createSerializableBigInt(value); -} -function cloneUndefined() { - return WorkletsModule.createSerializableUndefined(); -} -function cloneNull() { - return WorkletsModule.createSerializableNull(); -} -function cloneObjectProperties(value, shouldPersistRemote, depth) { - const clonedProps = {}; - for (const [key, element] of Object.entries(value)) { - // We don't need to clone __initData field as it contains long strings - // representing the worklet code, source map, and location, and we will - // serialize/deserialize it once. - if (key === '__initData' && clonedProps.__initData !== undefined) { - continue; - } - clonedProps[key] = createSerializable(element, shouldPersistRemote, depth + 1); - } - return clonedProps; -} -function cloneInitializer(value, shouldPersistRemote = false, depth = 0) { - const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth); - return WorkletsModule.createSerializableInitializer(clonedProps); -} -function cloneArray(value, shouldPersistRemote, depth) { - const clonedElements = value.map(element => createSerializable(element, shouldPersistRemote, depth + 1)); - const clone = WorkletsModule.createSerializableArray(clonedElements, shouldPersistRemote); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - freezeObjectInDev(value); - return clone; -} -function cloneRemoteFunction(value) { - const clone = WorkletsModule.createSerializableFunction(value); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - freezeObjectInDev(value); - return clone; -} -function cloneHostObject(value) { - // for host objects we pass the reference to the object as serializable and - // then recreate new host object wrapping the same instance on the UI thread. - // there is no point of iterating over keys as we do for regular objects. - const clone = WorkletsModule.createSerializableHostObject(value); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - return clone; -} -function cloneWorklet(value, shouldPersistRemote, depth) { - if (__DEV__) { - const babelVersion = value.__pluginVersion; - if (babelVersion !== undefined && babelVersion !== jsVersion) { - throw new WorkletsError(`Mismatch between JavaScript code version and Worklets Babel plugin version (${jsVersion} vs. ${babelVersion}). - See \`https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#mismatch-between-javascript-code-version-and-worklets-babel-plugin-version\` for more details. - Offending code was: \`${getWorkletCode(value)}\``); - } - registerWorkletStackDetails(value.__workletHash, value.__stackDetails); - } - if (value.__stackDetails) { - // `Error` type of value cannot be copied to the UI thread, so we - // remove it after we handled it in dev mode or delete it to ignore it in production mode. - // Not removing this would cause an infinite loop in production mode and it just - // seems more elegant to handle it this way. - delete value.__stackDetails; - } - const clonedProps = cloneObjectProperties(value, true, depth); - // to save on transferring static __initData field of worklet structure - // we request serializable value to persist its UI counterpart. This means - // that the __initData field that contains long strings representing the - // worklet code, source map, and location, will always be - // serialized/deserialized once. - clonedProps.__initData = createSerializable(value.__initData, true, depth + 1); - const clone = WorkletsModule.createSerializableWorklet(clonedProps, - // TODO: Check after refactor if we can remove shouldPersistRemote parameter (imho it's redundant here since worklets are always persistent) - // retain all worklets - true); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - freezeObjectInDev(value); - return clone; -} - -/** - * TurboModuleLike objects are JS objects that have a TurboModule as their - * prototype. - */ -function cloneTurboModuleLike(value, shouldPersistRemote, depth) { - const proto = Object.getPrototypeOf(value); - const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth); - const clone = WorkletsModule.createSerializableTurboModuleLike(clonedProps, proto); - return clone; -} -function cloneContextObject(value) { - const workletContextObjectFactory = value.__workletContextObjectFactory; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - - return workletContextObjectFactory(); - } - }); - serializableMappingCache.set(value, handle); - return handle; -} -function clonePlainJSObject(value, shouldPersistRemote, depth) { - const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth); - const clone = WorkletsModule.createSerializableObject(clonedProps, shouldPersistRemote, value); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - freezeObjectInDev(value); - return clone; -} -function cloneMap(value) { - const clonedKeys = []; - const clonedValues = []; - for (const [key, element] of value.entries()) { - clonedKeys.push(createSerializable(key)); - clonedValues.push(createSerializable(element)); - } - const clone = WorkletsModule.createSerializableMap(clonedKeys, clonedValues); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - freezeObjectInDev(value); - return clone; -} -function cloneSet(value) { - const clonedElements = []; - for (const element of value) { - clonedElements.push(createSerializable(element)); - } - const clone = WorkletsModule.createSerializableSet(clonedElements); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - freezeObjectInDev(value); - return clone; -} -function cloneRegExp(value) { - const pattern = value.source; - const flags = value.flags; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - - return new RegExp(pattern, flags); - } - }); - serializableMappingCache.set(value, handle); - return handle; -} -function cloneError(value) { - const { - name, - message, - stack - } = value; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - - // eslint-disable-next-line reanimated/use-worklets-error - const error = new Error(); - error.name = name; - error.message = message; - error.stack = stack; - return error; - } - }); - serializableMappingCache.set(value, handle); - return handle; -} -function cloneArrayBuffer(value, shouldPersistRemote) { - const clone = WorkletsModule.createSerializable(value, shouldPersistRemote, value); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - return clone; -} -function cloneArrayBufferView(value) { - const buffer = value.buffer; - const typeName = value.constructor.name; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - - if (!VALID_ARRAY_VIEWS_NAMES.includes(typeName)) { - throw new WorkletsError(`Invalid array view name \`${typeName}\`.`); - } - const constructor = global[typeName]; - if (constructor === undefined) { - throw new WorkletsError(`Constructor for \`${typeName}\` not found.`); - } - return new constructor(buffer); - } - }); - serializableMappingCache.set(value, handle); - return handle; -} -function cloneSynchronizable(value) { - serializableMappingCache.set(value); - return value; -} -function cloneImport(value) { - const { - source, - imported - } = value.__bundleData; - const clone = WorkletsModule.createSerializableImport(source, imported); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - return clone; -} -function cloneCustom(data, pack, typeId) { - const packedData = pack(data); - const serialized = createSerializable(packedData); - return WorkletsModule.createCustomSerializable(serialized, typeId); -} -function inaccessibleObject(value) { - // This is reached for object types that are not of plain Object.prototype. - // We don't support such objects from being transferred as serializables to - // the UI runtime and hence we replace them with "inaccessible object" - // which is implemented as a Proxy object that throws on any attempt - // of accessing its fields. We argue that such objects can sometimes leak - // as attributes of objects being captured by worklets but should never - // be used on the UI runtime regardless. If they are being accessed, the user - // will get an appropriate error message. - const clone = createSerializable(INACCESSIBLE_OBJECT); - serializableMappingCache.set(value, clone); - return clone; -} -const WORKLET_CODE_THRESHOLD = 255; -function getWorkletCode(value) { - const code = value?.__initData?.code; - if (!code) { - return 'unknown'; - } - if (code.length > WORKLET_CODE_THRESHOLD) { - return `${code.substring(0, WORKLET_CODE_THRESHOLD)}...`; - } - return code; -} -function isRemoteFunction(value) { - 'worklet'; - - return !!value.__remoteFunction; -} - -/** - * We freeze - * - * - Arrays, - * - Remote functions, - * - Plain JS objects, - * - * That are transformed to a serializable with a meaningful warning. This should - * help detect issues when someone modifies data after it's been converted. - * Meaning that they may be doing a faulty assumption in their code expecting - * that the updates are going to automatically propagate to the object sent to - * the UI thread. If the user really wants some objects to be mutable they - * should use shared values instead. - */ -function freezeObjectInDev(value) { - if (!__DEV__ || globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - return; - } - Object.entries(value).forEach(([key, element]) => { - const descriptor = Object.getOwnPropertyDescriptor(value, key); - if (!descriptor.configurable) { - return; - } - Object.defineProperty(value, key, { - get() { - return element; - }, - set() { - logger.warn(`Tried to modify key \`${key}\` of an object which has been already passed to a worklet. See - https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#tried-to-modify-key-of-an-object-which-has-been-converted-to-a-serializable - for more details.`); - } - }); - }); - Object.preventExtensions(value); -} -function makeShareableCloneOnUIRecursiveLEGACY(value) { - 'worklet'; - - // eslint-disable-next-line @typescript-eslint/no-shadow - function cloneRecursive(value) { - if (typeof value === 'object' && value !== null || typeof value === 'function') { - if (isHostObject(value)) { - // We call `_createSerializableClone` to wrap the provided HostObject - // inside SerializableJSRef. - return global._createSerializableHostObject(value); - } - if (isRemoteFunction(value)) { - // RemoteFunctions are created by us therefore they are - // a Serializable out of the box and there is no need to - // call `_createSerializableClone`. - return value.__remoteFunction; - } - if (Array.isArray(value)) { - return global._createSerializableArray(value.map(cloneRecursive)); - } - if (value.__synchronizableRef) { - return global._createSerializableSynchronizable(value); - } - if (Object.getPrototypeOf(value) !== Object.prototype) { - const length = globalThis.__customSerializationRegistry.length; - for (let i = 0; i < length; i++) { - const { - determine, - pack - } = globalThis.__customSerializationRegistry[i]; - if (determine(value)) { - const packedData = pack(value); - return globalThis.__workletsModuleProxy?.createCustomSerializable(cloneRecursive(packedData), i); - } - } - } - const toAdapt = {}; - for (const [key, element] of Object.entries(value)) { - toAdapt[key] = cloneRecursive(element); - } - return global._createSerializable(toAdapt, value); - } - if (typeof value === 'string') { - return global._createSerializableString(value); - } - if (typeof value === 'number') { - return global._createSerializableNumber(value); - } - if (typeof value === 'boolean') { - return global._createSerializableBoolean(value); - } - if (typeof value === 'bigint') { - return global._createSerializableBigInt(value); - } - if (value === undefined) { - return global._createSerializableUndefined(); - } - if (value === null) { - return global._createSerializableNull(); - } - return global._createSerializable(value, undefined); - } - return cloneRecursive(value); -} - -/** @deprecated This function is no longer supported. */ -export const makeShareableCloneOnUIRecursive = globalThis._WORKLETS_BUNDLE_MODE ? createSerializable : makeShareableCloneOnUIRecursiveLEGACY; - -/** - * This function creates a value on UI with persistent state - changes to it on - * the UI thread will be seen by all worklets. Use it when you want to create a - * value that is read and written only on the UI thread. - * - * @deprecated This function is no longer supported. - */ -export function makeShareable(value) { - if (serializableMappingCache.get(value)) { - return value; - } - const handle = createSerializable({ - __init: () => { - 'worklet'; - - return value; - } - }); - serializableMappingCache.set(value, handle); - return value; -} -//# sourceMappingURL=serializable.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js.map deleted file mode 100644 index f970b3bd..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializable.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["registerWorkletStackDetails","jsVersion","logger","WorkletsError","getRuntimeKind","RuntimeKind","isWorkletFunction","WorkletsModule","isSynchronizable","serializableMappingCache","serializableMappingFlag","MAGIC_KEY","isHostObject","value","isSerializableRef","__serializableRef","isPlainJSObject","object","Object","getPrototypeOf","prototype","isTurboModuleLike","getFromCache","cached","get","INACCESSIBLE_OBJECT","__init","Proxy","_","prop","String","set","VALID_ARRAY_VIEWS_NAMES","DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD","processedObjectAtThresholdDepth","createSerializable","shouldPersistRemote","depth","detectCyclicObject","isObject","isFunction","cloneString","cloneNumber","cloneBoolean","cloneBigInt","undefined","cloneUndefined","cloneNull","clonePrimitive","Array","isArray","cloneArray","globalThis","_WORKLETS_BUNDLE_MODE","__bundleData","cloneImport","cloneRemoteFunction","cloneTurboModuleLike","cloneHostObject","cloneInitializer","__workletContextObjectFactory","cloneContextObject","cloneWorklet","cloneSynchronizable","clonePlainJSObject","Set","cloneSet","Map","cloneMap","RegExp","cloneRegExp","Error","cloneError","ArrayBuffer","cloneArrayBuffer","isView","cloneArrayBufferView","i","customSerializationRegistry","length","determine","pack","cloneCustom","inaccessibleObject","imported","source","require","resolveWeak","__customSerializationRegistry","registerCustomSerializable","registrationData","__DEV__","ReactNative","name","unpack","verifyRegistrationData","some","data","console","warn","push","createSerializableString","createSerializableNumber","createSerializableBoolean","createSerializableBigInt","createSerializableUndefined","createSerializableNull","cloneObjectProperties","clonedProps","key","element","entries","__initData","createSerializableInitializer","clonedElements","map","clone","createSerializableArray","freezeObjectInDev","createSerializableFunction","createSerializableHostObject","babelVersion","__pluginVersion","getWorkletCode","__workletHash","__stackDetails","createSerializableWorklet","proto","createSerializableTurboModuleLike","workletContextObjectFactory","handle","createSerializableObject","clonedKeys","clonedValues","createSerializableMap","createSerializableSet","pattern","flags","message","stack","error","buffer","typeName","constructor","includes","global","createSerializableImport","typeId","packedData","serialized","createCustomSerializable","WORKLET_CODE_THRESHOLD","code","substring","isRemoteFunction","__remoteFunction","__RUNTIME_KIND","forEach","descriptor","getOwnPropertyDescriptor","configurable","defineProperty","preventExtensions","makeShareableCloneOnUIRecursiveLEGACY","cloneRecursive","_createSerializableHostObject","_createSerializableArray","__synchronizableRef","_createSerializableSynchronizable","__workletsModuleProxy","toAdapt","_createSerializable","_createSerializableString","_createSerializableNumber","_createSerializableBoolean","_createSerializableBigInt","_createSerializableUndefined","_createSerializableNull","makeShareableCloneOnUIRecursive","makeShareable"],"sourceRoot":"../../../src","sources":["memory/serializable.native.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js deleted file mode 100644 index 094a1865..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -export const serializableMappingCache = { - set(_serializable, _serializableRef) { - // NOOP - }, - get(_key) { - return null; - } -}; -//# sourceMappingURL=serializableMappingCache.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js.map deleted file mode 100644 index 205e8336..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["serializableMappingCache","set","_serializable","_serializableRef","get","_key"],"sourceRoot":"../../../src","sources":["memory/serializableMappingCache.ts"],"mappings":"AAAA,YAAY;;AAIZ,OAAO,MAAMA,wBAAwB,GAAG;EACtCC,GAAGA,CAACC,aAAqB,EAAEC,gBAAkC,EAAQ;IACnE;EAAA,CACD;EACDC,GAAGA,CAACC,IAAY,EAAqC;IACnD,OAAO,IAAI;EACb;AACF,CAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js deleted file mode 100644 index 63a81c12..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -/** - * This symbol is used to represent a mapping from the value to itself. - * - * It's used to prevent converting a serializable that's already converted - for - * example a Shared Value that's in worklet's closure. - */ -export const serializableMappingFlag = Symbol('serializable flag'); - -/* -During a fast refresh, React holds the same instance of a Mutable -(that's guaranteed by `useRef`) but `serializableCache` gets regenerated and thus -becoming empty. This happens when editing the file that contains the definition of this cache. - -Because of it, `createSerializable` can't find given mapping -in `serializableCache` for the Mutable and tries to clone it as if it was a regular JS object. -During cloning we use `Object.entries` to iterate over the keys which throws an error on accessing `_value`. -For convenience we moved this cache to a separate file so it doesn't scare us with red squiggles. -*/ - -const cache = new WeakMap(); -export const serializableMappingCache = { - set(serializable, serializableRef) { - cache.set(serializable, serializableRef || serializableMappingFlag); - }, - get: cache.get.bind(cache) -}; -//# sourceMappingURL=serializableMappingCache.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js.map deleted file mode 100644 index 960ede3c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/serializableMappingCache.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["serializableMappingFlag","Symbol","cache","WeakMap","serializableMappingCache","set","serializable","serializableRef","get","bind"],"sourceRoot":"../../../src","sources":["memory/serializableMappingCache.native.ts"],"mappings":"AAAA,YAAY;;AAIZ;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,uBAAuB,GAAGC,MAAM,CAAC,mBAAmB,CAAC;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,KAAK,GAAG,IAAIC,OAAO,CAAmC,CAAC;AAE7D,OAAO,MAAMC,wBAAwB,GAAG;EACtCC,GAAGA,CAACC,YAAoB,EAAEC,eAAiC,EAAQ;IACjEL,KAAK,CAACG,GAAG,CAACC,YAAY,EAAEC,eAAe,IAAIP,uBAAuB,CAAC;EACrE,CAAC;EACDQ,GAAG,EAAEN,KAAK,CAACM,GAAG,CAACC,IAAI,CAACP,KAAK;AAC3B,CAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js deleted file mode 100644 index b35b7948..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -import { WorkletsError } from '../debug/WorkletsError'; -export function createSynchronizable(_value) { - throw new WorkletsError('`createSynchronizable` is not supported on web.'); -} -//# sourceMappingURL=synchronizable.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js.map deleted file mode 100644 index fefcd549..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsError","createSynchronizable","_value"],"sourceRoot":"../../../src","sources":["memory/synchronizable.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,wBAAwB;AAGtD,OAAO,SAASC,oBAAoBA,CAClCC,MAAc,EACU;EACxB,MAAM,IAAIF,aAAa,CAAC,iDAAiD,CAAC;AAC5E","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js deleted file mode 100644 index f9b4c9f6..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -import { createSerializable } from './serializable'; -export function createSynchronizable(initialValue) { - const synchronizableRef = WorkletsModule.createSynchronizable(createSerializable(initialValue)); - return globalThis.__synchronizableUnpacker(synchronizableRef); -} -//# sourceMappingURL=synchronizable.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js.map deleted file mode 100644 index ea733126..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizable.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsModule","createSerializable","createSynchronizable","initialValue","synchronizableRef","globalThis","__synchronizableUnpacker"],"sourceRoot":"../../../src","sources":["memory/synchronizable.native.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,kCAAkC;AACjE,SAASC,kBAAkB,QAAQ,gBAAgB;AAGnD,OAAO,SAASC,oBAAoBA,CAClCC,YAAoB,EACI;EACxB,MAAMC,iBAAiB,GAAGJ,cAAc,CAACE,oBAAoB,CAC3DD,kBAAkB,CAACE,YAAY,CACjC,CAAC;EAED,OAAOE,UAAU,CAACC,wBAAwB,CACxCF,iBACF,CAAC;AACH","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js deleted file mode 100644 index b68b867d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -import { createSerializable } from './serializable'; -export function __installUnpacker() { - // TODO: Add cache for synchronizables. - const serializer = !globalThis._WORKLET || globalThis._WORKLETS_BUNDLE_MODE ? (value, _) => createSerializable(value) : globalThis._createSerializable; - function synchronizableUnpacker(synchronizableRef) { - const synchronizable = synchronizableRef; - const proxy = globalThis.__workletsModuleProxy; - synchronizable.__synchronizableRef = true; - synchronizable.getDirty = () => { - return proxy.synchronizableGetDirty(synchronizable); - }; - synchronizable.getBlocking = () => { - return proxy.synchronizableGetBlocking(synchronizable); - }; - synchronizable.setBlocking = valueOrFunction => { - let newValue; - if (typeof valueOrFunction === 'function') { - const func = valueOrFunction; - synchronizable.lock(); - const prev = synchronizable.getBlocking(); - newValue = func(prev); - proxy.synchronizableSetBlocking(synchronizable, serializer(newValue, undefined)); - synchronizable.unlock(); - } else { - const value = valueOrFunction; - newValue = value; - proxy.synchronizableSetBlocking(synchronizable, serializer(newValue, undefined)); - } - }; - synchronizable.lock = () => { - proxy.synchronizableLock(synchronizable); - }; - synchronizable.unlock = () => { - proxy.synchronizableUnlock(synchronizable); - }; - return synchronizable; - } - globalThis.__synchronizableUnpacker = synchronizableUnpacker; -} -//# sourceMappingURL=synchronizableUnpacker.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js.map deleted file mode 100644 index 1ed5eb9f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/synchronizableUnpacker.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["createSerializable","__installUnpacker","serializer","globalThis","_WORKLET","_WORKLETS_BUNDLE_MODE","value","_","_createSerializable","synchronizableUnpacker","synchronizableRef","synchronizable","proxy","__workletsModuleProxy","__synchronizableRef","getDirty","synchronizableGetDirty","getBlocking","synchronizableGetBlocking","setBlocking","valueOrFunction","newValue","func","lock","prev","synchronizableSetBlocking","undefined","unlock","synchronizableLock","synchronizableUnlock","__synchronizableUnpacker"],"sourceRoot":"../../../src","sources":["memory/synchronizableUnpacker.native.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,kBAAkB,QAAQ,gBAAgB;AAGnD,OAAO,SAASC,iBAAiBA,CAAA,EAAG;EAClC;EACA,MAAMC,UAAU,GACd,CAACC,UAAU,CAACC,QAAQ,IAAID,UAAU,CAACE,qBAAqB,GACpD,CAACC,KAAc,EAAEC,CAAU,KAAKP,kBAAkB,CAACM,KAAK,CAAC,GACzDH,UAAU,CAACK,mBAAmB;EAEpC,SAASC,sBAAsBA,CAC7BC,iBAA4C,EACpB;IACxB,MAAMC,cAAc,GAClBD,iBAAsD;IACxD,MAAME,KAAK,GAAGT,UAAU,CAACU,qBAAsB;IAE/CF,cAAc,CAACG,mBAAmB,GAAG,IAAI;IACzCH,cAAc,CAACI,QAAQ,GAAG,MAAM;MAC9B,OAAOH,KAAK,CAACI,sBAAsB,CAACL,cAAc,CAAC;IACrD,CAAC;IACDA,cAAc,CAACM,WAAW,GAAG,MAAM;MACjC,OAAOL,KAAK,CAACM,yBAAyB,CAACP,cAAc,CAAC;IACxD,CAAC;IACDA,cAAc,CAACQ,WAAW,GACxBC,eAAoD,IACjD;MACH,IAAIC,QAAgB;MACpB,IAAI,OAAOD,eAAe,KAAK,UAAU,EAAE;QACzC,MAAME,IAAI,GAAGF,eAA2C;QACxDT,cAAc,CAACY,IAAI,CAAC,CAAC;QACrB,MAAMC,IAAI,GAAGb,cAAc,CAACM,WAAW,CAAC,CAAC;QACzCI,QAAQ,GAAGC,IAAI,CAACE,IAAI,CAAC;QAErBZ,KAAK,CAACa,yBAAyB,CAC7Bd,cAAc,EACdT,UAAU,CAACmB,QAAQ,EAAEK,SAAS,CAChC,CAAC;QAEDf,cAAc,CAACgB,MAAM,CAAC,CAAC;MACzB,CAAC,MAAM;QACL,MAAMrB,KAAK,GAAGc,eAAe;QAC7BC,QAAQ,GAAGf,KAAK;QAChBM,KAAK,CAACa,yBAAyB,CAC7Bd,cAAc,EACdT,UAAU,CAACmB,QAAQ,EAAEK,SAAS,CAChC,CAAC;MACH;IACF,CAAC;IACDf,cAAc,CAACY,IAAI,GAAG,MAAM;MAC1BX,KAAK,CAACgB,kBAAkB,CAACjB,cAAc,CAAC;IAC1C,CAAC;IACDA,cAAc,CAACgB,MAAM,GAAG,MAAM;MAC5Bf,KAAK,CAACiB,oBAAoB,CAAClB,cAAc,CAAC;IAC5C,CAAC;IAED,OAAOA,cAAc;EACvB;EAEAR,UAAU,CAAC2B,wBAAwB,GAAGrB,sBAAsB;AAC9D","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js deleted file mode 100644 index 374e89e6..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/** - * The below type is used for HostObjects returned by the JSI API that don't - * have any accessible fields or methods but can carry data that is accessed - * from the c++ side. We add a field to the type to make it possible for - * typescript to recognize which JSI methods accept those types as arguments and - * to be able to correctly type check other methods that may use them. However, - * this field is not actually defined nor should be used for anything else as - * assigning any data to those objects will throw an error. - */ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js.map deleted file mode 100644 index 9d7a9f9d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":[],"sourceRoot":"../../../src","sources":["memory/types.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js deleted file mode 100644 index dc737a70..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -function __installUnpacker() { - const workletsCache = new Map(); - const handleCache = new WeakMap(); - function valueUnpacker(objectToUnpack, category, remoteFunctionName) { - // eslint-disable-next-line strict - 'use strict'; - - const workletHash = objectToUnpack.__workletHash; - if (workletHash !== undefined) { - let workletFun = workletsCache.get(workletHash); - if (workletFun === undefined) { - const initData = objectToUnpack.__initData; - if (globalThis.evalWithSourceMap) { - // if the runtime (hermes only for now) supports loading source maps - // we want to use the proper filename for the location as it guarantees - // that debugger understands and loads the source code of the file where - // the worklet is defined. - workletFun = globalThis.evalWithSourceMap('(' + initData.code + '\n)', initData.location, initData.sourceMap); - } else if (globalThis.evalWithSourceUrl) { - // if the runtime doesn't support loading source maps, in dev mode we - // can pass source url when evaluating the worklet. Now, instead of using - // the actual file location we use worklet hash, as it the allows us to - // properly symbolicate traces (see errors.ts for details) - workletFun = globalThis.evalWithSourceUrl('(' + initData.code + '\n)', `worklet_${workletHash}`); - } else { - // in release we use the regular eval to save on JSI calls - // eslint-disable-next-line no-eval - workletFun = eval('(' + initData.code + '\n)'); - } - workletsCache.set(workletHash, workletFun); - } - const functionInstance = workletFun.bind(objectToUnpack); - objectToUnpack._recur = functionInstance; - return functionInstance; - } else if (objectToUnpack.__init !== undefined) { - let value = handleCache.get(objectToUnpack); - if (value === undefined) { - value = objectToUnpack.__init(); - handleCache.set(objectToUnpack, value); - } - return value; - } else if (category === 'RemoteFunction') { - const fun = () => { - const label = remoteFunctionName ? `function \`${remoteFunctionName}\`` : 'anonymous function'; - // eslint-disable-next-line reanimated/use-worklets-error - throw new Error(`[Worklets] Tried to synchronously call a non-worklet ${label} on the UI thread. -See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.`); - }; - fun.__remoteFunction = objectToUnpack; - return fun; - } else { - // eslint-disable-next-line reanimated/use-worklets-error - throw new Error(`[Worklets] Data type in category "${category}" not recognized by value unpacker: "${globalThis._toString(objectToUnpack)}".`); - } - } - globalThis.__valueUnpacker = valueUnpacker; -} -export {}; -//# sourceMappingURL=valueUnpacker.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js.map deleted file mode 100644 index 7a781f91..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/memory/valueUnpacker.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["__installUnpacker","workletsCache","Map","handleCache","WeakMap","valueUnpacker","objectToUnpack","category","remoteFunctionName","workletHash","__workletHash","undefined","workletFun","get","initData","__initData","globalThis","evalWithSourceMap","code","location","sourceMap","evalWithSourceUrl","eval","set","functionInstance","bind","_recur","__init","value","fun","label","Error","__remoteFunction","_toString","__valueUnpacker"],"sourceRoot":"../../../src","sources":["memory/valueUnpacker.native.ts"],"mappings":"AAAA,YAAY;;AAaZ,SAASA,iBAAiBA,CAAA,EAAG;EAC3B,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAwB,CAAC;EACtD,MAAMC,WAAW,GAAG,IAAIC,OAAO,CAAkB,CAAC;EAElD,SAASC,aAAaA,CACpBC,cAA8B,EAC9BC,QAAiB,EACjBC,kBAA2B,EAClB;IACT;IACA,YAAY;;IACZ,MAAMC,WAAW,GAAGH,cAAc,CAACI,aAAa;IAChD,IAAID,WAAW,KAAKE,SAAS,EAAE;MAC7B,IAAIC,UAAU,GAAGX,aAAa,CAACY,GAAG,CAACJ,WAAW,CAAC;MAC/C,IAAIG,UAAU,KAAKD,SAAS,EAAE;QAC5B,MAAMG,QAAQ,GAAGR,cAAc,CAACS,UAAU;QAC1C,IAAIC,UAAU,CAACC,iBAAiB,EAAE;UAChC;UACA;UACA;UACA;UACAL,UAAU,GAAGI,UAAU,CAACC,iBAAiB,CACvC,GAAG,GAAGH,QAAQ,CAAEI,IAAI,GAAG,KAAK,EAC5BJ,QAAQ,CAAEK,QAAQ,EAClBL,QAAQ,CAAEM,SACZ,CAAC;QACH,CAAC,MAAM,IAAIJ,UAAU,CAACK,iBAAiB,EAAE;UACvC;UACA;UACA;UACA;UACAT,UAAU,GAAGI,UAAU,CAACK,iBAAiB,CACvC,GAAG,GAAGP,QAAQ,CAAEI,IAAI,GAAG,KAAK,EAC5B,WAAWT,WAAW,EACxB,CAAC;QACH,CAAC,MAAM;UACL;UACA;UACAG,UAAU,GAAGU,IAAI,CAAC,GAAG,GAAGR,QAAQ,CAAEI,IAAI,GAAG,KAAK,CAAC;QACjD;QACAjB,aAAa,CAACsB,GAAG,CAACd,WAAW,EAAEG,UAAW,CAAC;MAC7C;MACA,MAAMY,gBAAgB,GAAGZ,UAAU,CAAEa,IAAI,CAACnB,cAAc,CAAC;MACzDA,cAAc,CAACoB,MAAM,GAAGF,gBAAgB;MACxC,OAAOA,gBAAgB;IACzB,CAAC,MAAM,IAAIlB,cAAc,CAACqB,MAAM,KAAKhB,SAAS,EAAE;MAC9C,IAAIiB,KAAK,GAAGzB,WAAW,CAACU,GAAG,CAACP,cAAc,CAAC;MAC3C,IAAIsB,KAAK,KAAKjB,SAAS,EAAE;QACvBiB,KAAK,GAAGtB,cAAc,CAACqB,MAAM,CAAC,CAAC;QAC/BxB,WAAW,CAACoB,GAAG,CAACjB,cAAc,EAAEsB,KAAK,CAAC;MACxC;MACA,OAAOA,KAAK;IACd,CAAC,MAAM,IAAIrB,QAAQ,KAAK,gBAAgB,EAAE;MACxC,MAAMsB,GAAG,GAAGA,CAAA,KAAM;QAChB,MAAMC,KAAK,GAAGtB,kBAAkB,GAC5B,cAAcA,kBAAkB,IAAI,GACpC,oBAAoB;QACxB;QACA,MAAM,IAAIuB,KAAK,CAAC,wDAAwDD,KAAK;AACrF,uKAAuK,CAAC;MAClK,CAAC;MACDD,GAAG,CAACG,gBAAgB,GAAG1B,cAAc;MACrC,OAAOuB,GAAG;IACZ,CAAC,MAAM;MACL;MACA,MAAM,IAAIE,KAAK,CACb,qCAAqCxB,QAAQ,wCAAwCS,UAAU,CAACiB,SAAS,CACvG3B,cACF,CAAC,IACH,CAAC;IACH;EACF;EAEAU,UAAU,CAACkB,eAAe,GAAG7B,aAA8B;AAC7D;AAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/mock.js b/frontend-admin/node_modules/react-native-worklets/lib/module/mock.js deleted file mode 100644 index 58f9c3d9..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/mock.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; - -import { mockedRequestAnimationFrame } from './runLoop/uiRuntime/mockedRequestAnimationFrame'; -import { RuntimeKind } from './runtimeKind'; -import { isWorkletFunction } from './workletFunction'; -const NOOP = () => {}; -const NOOP_FACTORY = () => NOOP; -const ID = value => value; -const IMMEDIATE_CALLBACK_INVOCATION = callback => callback(); -globalThis._WORKLET = false; -globalThis.__RUNTIME_KIND = RuntimeKind.ReactNative; -globalThis._log = console.log; -globalThis._getAnimationTimestamp = () => performance.now(); -// requestAnimationFrame react-native jest's setup is incorrect as it polyfills -// the method directly using setTimeout, therefore the callback doesn't get the -// expected timestamp as the only argument: https://github.com/facebook/react-native/blob/main/packages/react-native/jest/setup.js#L28 -// We override this setup here to make sure that callbacks get the proper timestamps -// when executed. For non-jest environments we define requestAnimationFrame in setupRequestAnimationFrame -// @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number -globalThis.requestAnimationFrame = mockedRequestAnimationFrame; -const WorkletAPI = { - isShareableRef: () => true, - makeShareable: ID, - makeShareableCloneOnUIRecursive: ID, - makeShareableCloneRecursive: ID, - shareableMappingCache: new Map(), - getStaticFeatureFlag: () => false, - setDynamicFeatureFlag: NOOP, - isSynchronizable: () => false, - getRuntimeKind: () => RuntimeKind.ReactNative, - RuntimeKind: RuntimeKind, - createWorkletRuntime: NOOP_FACTORY, - runOnRuntime: ID, - scheduleOnRuntime: IMMEDIATE_CALLBACK_INVOCATION, - createSerializable: ID, - isSerializableRef: ID, - serializableMappingCache: new Map(), - createSynchronizable: ID, - callMicrotasks: NOOP, - executeOnUIRuntimeSync: ID, - runOnJS(fun) { - return (...args) => queueMicrotask(args.length ? () => fun(...args) : fun); - }, - runOnUI(worklet) { - return (...args) => { - // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask - // callbacks run on the same queue and can be interleaved. There is no way - // to flush particular queue in Jest and the only control over mocked timers - // is by using jest.advanceTimersByTime() method which advances all types - // of timers including immediate and animation callbacks. Ideally we'd like - // to have some way here to schedule work along with React updates, but - // that's not possible, and hence in Jest environment instead of using scheduling - // mechanism we just schedule the work ommiting the queue. This is ok for the - // uses that we currently have but may not be ok for future tests that we write. - mockedRequestAnimationFrame(() => { - worklet(...args); - }); - }; - }, - runOnUIAsync(worklet) { - return (...args) => { - return new Promise(resolve => { - mockedRequestAnimationFrame(() => { - const result = worklet(...args); - resolve(result); - }); - }); - }; - }, - runOnUISync: IMMEDIATE_CALLBACK_INVOCATION, - scheduleOnRN(fun, ...args) { - WorkletAPI.runOnJS(fun)(...args); - }, - scheduleOnUI(worklet, ...args) { - WorkletAPI.runOnUI(worklet)(...args); - }, - // eslint-disable-next-line camelcase - unstable_eventLoopTask: NOOP_FACTORY, - isWorkletFunction: isWorkletFunction, - WorkletsModule: {} -}; -module.exports = { - __esModule: true, - ...WorkletAPI -}; -//# sourceMappingURL=mock.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/mock.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/mock.js.map deleted file mode 100644 index 4385977a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/mock.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["mockedRequestAnimationFrame","RuntimeKind","isWorkletFunction","NOOP","NOOP_FACTORY","ID","value","IMMEDIATE_CALLBACK_INVOCATION","callback","globalThis","_WORKLET","__RUNTIME_KIND","ReactNative","_log","console","log","_getAnimationTimestamp","performance","now","requestAnimationFrame","WorkletAPI","isShareableRef","makeShareable","makeShareableCloneOnUIRecursive","makeShareableCloneRecursive","shareableMappingCache","Map","getStaticFeatureFlag","setDynamicFeatureFlag","isSynchronizable","getRuntimeKind","createWorkletRuntime","runOnRuntime","scheduleOnRuntime","createSerializable","isSerializableRef","serializableMappingCache","createSynchronizable","callMicrotasks","executeOnUIRuntimeSync","runOnJS","fun","args","queueMicrotask","length","runOnUI","worklet","runOnUIAsync","Promise","resolve","result","runOnUISync","scheduleOnRN","scheduleOnUI","unstable_eventLoopTask","WorkletsModule","module","exports","__esModule"],"sourceRoot":"../../src","sources":["mock.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js b/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js deleted file mode 100644 index 386603c8..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -import { Platform } from 'react-native'; -export const IS_JEST = !!process.env.JEST_WORKER_ID; -export const IS_WEB = Platform.OS === 'web'; -export const IS_WINDOWS = Platform.OS === 'windows'; -export const SHOULD_BE_USE_WEB = IS_JEST || IS_WEB || IS_WINDOWS; -//# sourceMappingURL=platformChecker.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js.map deleted file mode 100644 index aeb3c570..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["Platform","IS_JEST","process","env","JEST_WORKER_ID","IS_WEB","OS","IS_WINDOWS","SHOULD_BE_USE_WEB"],"sourceRoot":"../../src","sources":["platformChecker.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,QAAQ,QAAQ,cAAc;AAEvC,OAAO,MAAMC,OAAgB,GAAG,CAAC,CAACC,OAAO,CAACC,GAAG,CAACC,cAAc;AAC5D,OAAO,MAAMC,MAAe,GAAGL,QAAQ,CAACM,EAAE,KAAK,KAAK;AACpD,OAAO,MAAMC,UAAmB,GAAGP,QAAQ,CAACM,EAAE,KAAK,SAAS;AAC5D,OAAO,MAAME,iBAA0B,GAAGP,OAAO,IAAII,MAAM,IAAIE,UAAU","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js deleted file mode 100644 index cac1d0ad..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -export const IS_JEST = false; -//# sourceMappingURL=platformChecker.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js.map deleted file mode 100644 index 829d5ca1..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/platformChecker.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["IS_JEST"],"sourceRoot":"../../src","sources":["platformChecker.native.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAO,MAAMA,OAAO,GAAG,KAAK","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js b/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js index 8f6b36b2..7819c31c 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js @@ -1,3 +1,4 @@ +/* eslint-disable reanimated/use-global-this */ 'use strict'; // This file works by accident - currently Builder Bob doesn't move `.d.ts` files to output types. diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js.map index 4c5f1022..b8d3af17 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/privateGlobals.d.js.map @@ -1 +1 @@ -{"version":3,"names":[],"sourceRoot":"../../src","sources":["privateGlobals.d.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA;AAAA","ignoreList":[]} +{"version":3,"names":[],"sourceRoot":"../../src","sources":["privateGlobals.d.ts"],"mappings":"AAAA;AACA,YAAY;;AAEZ;AACA;AAAA","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js index aa82693e..8cd6d712 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js @@ -1,6 +1,6 @@ 'use strict'; -import { callMicrotasks } from '../../threads'; +import { callMicrotasks } from "../../threads.js"; export function setupRequestAnimationFrame() { 'worklet'; diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js.map index 475f2ef7..877315c6 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/uiRuntime/requestAnimationFrame.js.map @@ -1 +1 @@ -{"version":3,"names":["callMicrotasks","setupRequestAnimationFrame","nativeRequestAnimationFrame","globalThis","requestAnimationFrame","queuedCallbacks","queuedCallbacksBegin","queuedCallbacksEnd","flushedCallbacks","flushedCallbacksBegin","flushedCallbacksEnd","flushRequested","__flushAnimationFrame","timestamp","callback","handle","push","__frameTimestamp","undefined","cancelAnimationFrame"],"sourceRoot":"../../../../src","sources":["runLoop/uiRuntime/requestAnimationFrame.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,eAAe;AAE9C,OAAO,SAASC,0BAA0BA,CAAA,EAAG;EAC3C,SAAS;;EACT,MAAMC,2BAA2B,GAAGC,UAAU,CAACC,qBAAqB;EAEpE,IAAIC,eAAgD,GAAG,EAAE;EACzD,IAAIC,oBAAoB,GAAG,CAAC;EAC5B,IAAIC,kBAAkB,GAAG,CAAC;EAE1B,IAAIC,gBAAgB,GAAGH,eAAe;EACtC,IAAII,qBAAqB,GAAG,CAAC;EAC7B,IAAIC,mBAAmB,GAAG,CAAC;EAE3B,IAAIC,cAAc,GAAG,KAAK;EAE1BR,UAAU,CAACS,qBAAqB,GAAIC,SAAiB,IAAK;IACxDL,gBAAgB,GAAGH,eAAe;IAClCA,eAAe,GAAG,EAAE;IAEpBI,qBAAqB,GAAGH,oBAAoB;IAC5CI,mBAAmB,GAAGH,kBAAkB;IACxCD,oBAAoB,GAAGC,kBAAkB;IAEzC,KAAK,MAAMO,QAAQ,IAAIN,gBAAgB,EAAE;MACvCM,QAAQ,CAACD,SAAS,CAAC;IACrB;IAEAJ,qBAAqB,GAAGC,mBAAmB;IAE3CV,cAAc,CAAC,CAAC;EAClB,CAAC;EAEDG,UAAU,CAACC,qBAAqB,GAC9BU,QAAqC,IAC1B;IACX,MAAMC,MAAM,GAAGR,kBAAkB,EAAE;IAEnCF,eAAe,CAACW,IAAI,CAACF,QAAQ,CAAC;IAC9B,IAAI,CAACH,cAAc,EAAE;MACnBA,cAAc,GAAG,IAAI;MAErBT,2BAA2B,CAAEW,SAAS,IAAK;QACzCF,cAAc,GAAG,KAAK;QACtBR,UAAU,CAACc,gBAAgB,GAAGJ,SAAS;QACvCV,UAAU,CAACS,qBAAqB,CAACC,SAAS,CAAC;QAC3CV,UAAU,CAACc,gBAAgB,GAAGC,SAAS;MACzC,CAAC,CAAC;IACJ;IACA,OAAOH,MAAM;EACf,CAAC;EAEDZ,UAAU,CAACgB,oBAAoB,GAAIJ,MAAc,IAAK;IACpD,IAAIA,MAAM,GAAGN,qBAAqB,IAAIM,MAAM,IAAIR,kBAAkB,EAAE;MAClE;IACF;IAEA,IAAIQ,MAAM,GAAGL,mBAAmB,EAAE;MAChCF,gBAAgB,CAACO,MAAM,GAAGN,qBAAqB,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7D,CAAC,MAAM;MACLJ,eAAe,CAACU,MAAM,GAAGT,oBAAoB,CAAC,GAAG,MAAM,CAAC,CAAC;IAC3D;EACF,CAAC;AACH","ignoreList":[]} +{"version":3,"names":["callMicrotasks","setupRequestAnimationFrame","nativeRequestAnimationFrame","globalThis","requestAnimationFrame","queuedCallbacks","queuedCallbacksBegin","queuedCallbacksEnd","flushedCallbacks","flushedCallbacksBegin","flushedCallbacksEnd","flushRequested","__flushAnimationFrame","timestamp","callback","handle","push","__frameTimestamp","undefined","cancelAnimationFrame"],"sourceRoot":"../../../../src","sources":["runLoop/uiRuntime/requestAnimationFrame.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,cAAc,QAAQ,kBAAe;AAE9C,OAAO,SAASC,0BAA0BA,CAAA,EAAG;EAC3C,SAAS;;EACT,MAAMC,2BAA2B,GAAGC,UAAU,CAACC,qBAAqB;EAEpE,IAAIC,eAAgD,GAAG,EAAE;EACzD,IAAIC,oBAAoB,GAAG,CAAC;EAC5B,IAAIC,kBAAkB,GAAG,CAAC;EAE1B,IAAIC,gBAAgB,GAAGH,eAAe;EACtC,IAAII,qBAAqB,GAAG,CAAC;EAC7B,IAAIC,mBAAmB,GAAG,CAAC;EAE3B,IAAIC,cAAc,GAAG,KAAK;EAE1BR,UAAU,CAACS,qBAAqB,GAAIC,SAAiB,IAAK;IACxDL,gBAAgB,GAAGH,eAAe;IAClCA,eAAe,GAAG,EAAE;IAEpBI,qBAAqB,GAAGH,oBAAoB;IAC5CI,mBAAmB,GAAGH,kBAAkB;IACxCD,oBAAoB,GAAGC,kBAAkB;IAEzC,KAAK,MAAMO,QAAQ,IAAIN,gBAAgB,EAAE;MACvCM,QAAQ,CAACD,SAAS,CAAC;IACrB;IAEAJ,qBAAqB,GAAGC,mBAAmB;IAE3CV,cAAc,CAAC,CAAC;EAClB,CAAC;EAEDG,UAAU,CAACC,qBAAqB,GAC9BU,QAAqC,IAC1B;IACX,MAAMC,MAAM,GAAGR,kBAAkB,EAAE;IAEnCF,eAAe,CAACW,IAAI,CAACF,QAAQ,CAAC;IAC9B,IAAI,CAACH,cAAc,EAAE;MACnBA,cAAc,GAAG,IAAI;MAErBT,2BAA2B,CAAEW,SAAS,IAAK;QACzCF,cAAc,GAAG,KAAK;QACtBR,UAAU,CAACc,gBAAgB,GAAGJ,SAAS;QACvCV,UAAU,CAACS,qBAAqB,CAACC,SAAS,CAAC;QAC3CV,UAAU,CAACc,gBAAgB,GAAGC,SAAS;MACzC,CAAC,CAAC;IACJ;IACA,OAAOH,MAAM;EACf,CAAC;EAEDZ,UAAU,CAACgB,oBAAoB,GAAIJ,MAAc,IAAK;IACpD,IAAIA,MAAM,GAAGN,qBAAqB,IAAIM,MAAM,IAAIR,kBAAkB,EAAE;MAClE;IACF;IAEA,IAAIQ,MAAM,GAAGL,mBAAmB,EAAE;MAChCF,gBAAgB,CAACO,MAAM,GAAGN,qBAAqB,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7D,CAAC,MAAM;MACLJ,eAAe,CAACU,MAAM,GAAGT,oBAAoB,CAAC,GAAG,MAAM,CAAC,CAAC;IAC3D;EACF,CAAC;AACH","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js index 6428120f..f0533406 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js @@ -1,11 +1,11 @@ 'use strict'; -import { setupSetImmediate } from '../common/setImmediatePolyfill'; -import { setupSetInterval } from '../common/setIntervalPolyfill'; -import { setupQueueMicrotask } from './queueMicrotask'; -import { setupRequestAnimationFrame } from './requestAnimationFramePolyfill'; -import { setupSetTimeout } from './setTimeout'; -import { setupTaskQueue } from './taskQueue'; +import { setupSetImmediate } from "../common/setImmediatePolyfill.js"; +import { setupSetInterval } from "../common/setIntervalPolyfill.js"; +import { setupQueueMicrotask } from "./queueMicrotask.js"; +import { setupRequestAnimationFrame } from "./requestAnimationFramePolyfill.js"; +import { setupSetTimeout } from "./setTimeout.js"; +import { setupTaskQueue } from "./taskQueue.js"; export function setupRunLoop(animationQueuePollingRate) { 'worklet'; diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js.map index aeb90bf1..afa2569a 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/index.js.map @@ -1 +1 @@ -{"version":3,"names":["setupSetImmediate","setupSetInterval","setupQueueMicrotask","setupRequestAnimationFrame","setupSetTimeout","setupTaskQueue","setupRunLoop","animationQueuePollingRate"],"sourceRoot":"../../../../src","sources":["runLoop/workletRuntime/index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,iBAAiB,QAAQ,gCAAgC;AAClE,SAASC,gBAAgB,QAAQ,+BAA+B;AAChE,SAASC,mBAAmB,QAAQ,kBAAkB;AACtD,SAASC,0BAA0B,QAAQ,iCAAiC;AAC5E,SAASC,eAAe,QAAQ,cAAc;AAC9C,SAASC,cAAc,QAAQ,aAAa;AAE5C,OAAO,SAASC,YAAYA,CAACC,yBAAiC,EAAE;EAC9D,SAAS;;EACTF,cAAc,CAAC,CAAC;EAChBH,mBAAmB,CAAC,CAAC;EACrBE,eAAe,CAAC,CAAC;EACjBD,0BAA0B,CAACI,yBAAyB,CAAC;EACrDP,iBAAiB,CAAC,CAAC;EACnBC,gBAAgB,CAAC,CAAC;AACpB","ignoreList":[]} +{"version":3,"names":["setupSetImmediate","setupSetInterval","setupQueueMicrotask","setupRequestAnimationFrame","setupSetTimeout","setupTaskQueue","setupRunLoop","animationQueuePollingRate"],"sourceRoot":"../../../../src","sources":["runLoop/workletRuntime/index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,gBAAgB,QAAQ,kCAA+B;AAChE,SAASC,mBAAmB,QAAQ,qBAAkB;AACtD,SAASC,0BAA0B,QAAQ,oCAAiC;AAC5E,SAASC,eAAe,QAAQ,iBAAc;AAC9C,SAASC,cAAc,QAAQ,gBAAa;AAE5C,OAAO,SAASC,YAAYA,CAACC,yBAAiC,EAAE;EAC9D,SAAS;;EACTF,cAAc,CAAC,CAAC;EAChBH,mBAAmB,CAAC,CAAC;EACrBE,eAAe,CAAC,CAAC;EACjBD,0BAA0B,CAACI,yBAAyB,CAAC;EACrDP,iBAAiB,CAAC,CAAC;EACnBC,gBAAgB,CAAC,CAAC;AACpB","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js index f258522f..58533218 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js @@ -1,6 +1,6 @@ 'use strict'; -import { pushMicrotask } from './taskQueue'; +import { pushMicrotask } from "./taskQueue.js"; export function setupQueueMicrotask() { 'worklet'; diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js.map index 33a941a5..cd271d0a 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/queueMicrotask.js.map @@ -1 +1 @@ -{"version":3,"names":["pushMicrotask","setupQueueMicrotask","globalThis","queueMicrotask","callback","args"],"sourceRoot":"../../../../src","sources":["runLoop/workletRuntime/queueMicrotask.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,aAAa;AAE3C,OAAO,SAASC,mBAAmBA,CAAA,EAAG;EACpC,SAAS;;EACTC,UAAU,CAACC,cAAc,GAAG,UAC1BC,QAAsC,EACtC,GAAGC,IAAe,EAClB;IACAL,aAAa,CAAC,MAAMI,QAAQ,CAAC,GAAGC,IAAI,CAAC,CAAC;EACxC,CAA0B;AAC5B","ignoreList":[]} +{"version":3,"names":["pushMicrotask","setupQueueMicrotask","globalThis","queueMicrotask","callback","args"],"sourceRoot":"../../../../src","sources":["runLoop/workletRuntime/queueMicrotask.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,gBAAa;AAE3C,OAAO,SAASC,mBAAmBA,CAAA,EAAG;EACpC,SAAS;;EACTC,UAAU,CAACC,cAAc,GAAG,UAC1BC,QAAsC,EACtC,GAAGC,IAAe,EAClB;IACAL,aAAa,CAAC,MAAMI,QAAQ,CAAC,GAAGC,IAAI,CAAC,CAAC;EACxC,CAA0B;AAC5B","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js index 7ce3196f..9ae8d518 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js @@ -1,6 +1,6 @@ 'use strict'; -import { pushTask } from './taskQueue'; +import { pushTask } from "./taskQueue.js"; export function setupSetTimeout() { 'worklet'; diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js.map index cfb582e2..71e02b0b 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runLoop/workletRuntime/setTimeout.js.map @@ -1 +1 @@ -{"version":3,"names":["pushTask","setupSetTimeout","pendingHandlers","Set","ID","setTimeoutPolyfill","callback","delay","args","handlerId","timeoutCallback","has","delete","add","clearTimeoutPolyfill","timeoutHandle","globalThis","setTimeout","clearTimeout"],"sourceRoot":"../../../../src","sources":["runLoop/workletRuntime/setTimeout.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,QAAQ,QAAQ,aAAa;AAEtC,OAAO,SAASC,eAAeA,CAAA,EAAG;EAChC,SAAS;;EAET,MAAMC,eAA4B,GAAG,IAAIC,GAAG,CAAC,CAAC;EAC9C,IAAIC,EAAE,GAAG,CAAC;EAEV,MAAMC,kBAAkB,GAAGA,CACzBC,QAAsC,EACtCC,KAAa,GAAG,CAAC,EACjB,GAAGC,IAAe,KACf;IACH,MAAMC,SAAS,GAAGL,EAAE,EAAE;IAEtB,MAAMM,eAAe,GAAGA,CAAA,KAAM;MAC5B,IAAI,CAACR,eAAe,CAACS,GAAG,CAACF,SAAS,CAAC,EAAE;QACnC;MACF;MACAH,QAAQ,CAAC,GAAGE,IAAI,CAAC;MACjBN,eAAe,CAACU,MAAM,CAACH,SAAS,CAAC;IACnC,CAAC;IAEDP,eAAe,CAACW,GAAG,CAACJ,SAAS,CAAC;IAC9BT,QAAQ,CAACU,eAAe,EAAED,SAAS,EAAEF,KAAK,CAAC;IAC3C,OAAOE,SAAS;EAClB,CAAC;EAED,MAAMK,oBAAoB,GAAIC,aAAqB,IAAK;IACtDb,eAAe,CAACU,MAAM,CAACG,aAAa,CAAC;EACvC,CAAC;EAEDC,UAAU,CAACC,UAAU,GAAGZ,kBAAuC;EAC/DW,UAAU,CAACE,YAAY,GAAGJ,oBAA2C;AACvE","ignoreList":[]} +{"version":3,"names":["pushTask","setupSetTimeout","pendingHandlers","Set","ID","setTimeoutPolyfill","callback","delay","args","handlerId","timeoutCallback","has","delete","add","clearTimeoutPolyfill","timeoutHandle","globalThis","setTimeout","clearTimeout"],"sourceRoot":"../../../../src","sources":["runLoop/workletRuntime/setTimeout.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,QAAQ,QAAQ,gBAAa;AAEtC,OAAO,SAASC,eAAeA,CAAA,EAAG;EAChC,SAAS;;EAET,MAAMC,eAA4B,GAAG,IAAIC,GAAG,CAAC,CAAC;EAC9C,IAAIC,EAAE,GAAG,CAAC;EAEV,MAAMC,kBAAkB,GAAGA,CACzBC,QAAsC,EACtCC,KAAa,GAAG,CAAC,EACjB,GAAGC,IAAe,KACf;IACH,MAAMC,SAAS,GAAGL,EAAE,EAAE;IAEtB,MAAMM,eAAe,GAAGA,CAAA,KAAM;MAC5B,IAAI,CAACR,eAAe,CAACS,GAAG,CAACF,SAAS,CAAC,EAAE;QACnC;MACF;MACAH,QAAQ,CAAC,GAAGE,IAAI,CAAC;MACjBN,eAAe,CAACU,MAAM,CAACH,SAAS,CAAC;IACnC,CAAC;IAEDP,eAAe,CAACW,GAAG,CAACJ,SAAS,CAAC;IAC9BT,QAAQ,CAACU,eAAe,EAAED,SAAS,EAAEF,KAAK,CAAC;IAC3C,OAAOE,SAAS;EAClB,CAAC;EAED,MAAMK,oBAAoB,GAAIC,aAAqB,IAAK;IACtDb,eAAe,CAACU,MAAM,CAACG,aAAa,CAAC;EACvC,CAAC;EAEDC,UAAU,CAACC,UAAU,GAAGZ,kBAAuC;EAC/DW,UAAU,CAACE,YAAY,GAAGJ,oBAA2C;AACvE","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js index a7a03429..b0c7a193 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js @@ -1,17 +1,8 @@ 'use strict'; export let RuntimeKind = /*#__PURE__*/function (RuntimeKind) { - /** - * The React Native runtime, which is the main runtime for React Native where - * React exists and where components are rendered. - */ RuntimeKind[RuntimeKind["ReactNative"] = 1] = "ReactNative"; - /** - * The UI runtime, which is a special runtime that executes on the UI thread, - * mostly used for animations and gestures. - */ RuntimeKind[RuntimeKind["UI"] = 2] = "UI"; - /** Additional runtime created on-demand by the user. */ RuntimeKind[RuntimeKind["Worker"] = 3] = "Worker"; return RuntimeKind; }({}); diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js.map index 4c998410..6e293479 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimeKind.js.map @@ -1 +1 @@ -{"version":3,"names":["RuntimeKind","getRuntimeKind","globalThis","__RUNTIME_KIND","undefined","ReactNative"],"sourceRoot":"../../src","sources":["runtimeKind.ts"],"mappings":"AAAA,YAAY;;AAEZ,WAAYA,WAAW,0BAAXA,WAAW;EACrB;AACF;AACA;AACA;EAJYA,WAAW,CAAXA,WAAW;EAMrB;AACF;AACA;AACA;EATYA,WAAW,CAAXA,WAAW;EAWrB;EAXUA,WAAW,CAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAevB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAgB;EAC5C,SAAS;;EACT,OAAOC,UAAU,CAACC,cAAc;AAClC;AAEA,IAAID,UAAU,CAACC,cAAc,KAAKC,SAAS,EAAE;EAC3C;EACA;EACA;EACAF,UAAU,CAACC,cAAc,GAAGH,WAAW,CAACK,WAAW;AACrD","ignoreList":[]} +{"version":3,"names":["RuntimeKind","getRuntimeKind","globalThis","__RUNTIME_KIND","undefined","ReactNative"],"sourceRoot":"../../src","sources":["runtimeKind.ts"],"mappings":"AAAA,YAAY;;AAEZ,WAAYA,WAAW,0BAAXA,WAAW;EAAXA,WAAW,CAAXA,WAAW;EAAXA,WAAW,CAAXA,WAAW;EAAXA,WAAW,CAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAevB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAgB;EAC5C,SAAS;;EACT,OAAOC,UAAU,CAACC,cAAc;AAClC;AAEA,IAAID,UAAU,CAACC,cAAc,KAAKC,SAAS,EAAE;EAC3C;EACA;EACA;EACAF,UAAU,CAACC,cAAc,GAAGH,WAAW,CAACK,WAAW;AACrD","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js index c447ea7c..0a41f86f 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js @@ -1,13 +1,100 @@ 'use strict'; -import { WorkletsError } from './debug/WorkletsError'; -export function createWorkletRuntime() { - throw new WorkletsError('`createWorkletRuntime` is not supported on web.'); +import { setupCallGuard } from "./callGuard.js"; +import { getMemorySafeCapturableConsole, setupConsole } from "./initializers.js"; +import { SHOULD_BE_USE_WEB } from "./PlatformChecker/index.js"; +import { setupRunLoop } from "./runLoop/workletRuntime/index.js"; +import { RuntimeKind } from "./runtimeKind.js"; +import { createSerializable, makeShareableCloneOnUIRecursive } from "./serializable.js"; +import { isWorkletFunction } from "./workletFunction.js"; +import { registerWorkletsError, WorkletsError } from "./WorkletsError.js"; +import { WorkletsModule } from "./WorkletsModule/index.js"; + +/** + * Lets you create a new JS runtime which can be used to run worklets possibly + * on different threads than JS or UI thread. + * + * @param config - Runtime configuration object - {@link WorkletRuntimeConfig}. + * @returns WorkletRuntime which is a + * `jsi::HostObject` - {@link WorkletRuntime} + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ + */ +// @ts-expect-error Public API overload. + +/** + * @deprecated Please use the new config object signature instead: + * `createWorkletRuntime({ name, initializer })` + * + * Lets you create a new JS runtime which can be used to run worklets possibly + * on different threads than JS or UI thread. + * @param name - A name used to identify the runtime which will appear in + * devices list in Chrome DevTools. + * @param initializer - An optional worklet that will be run synchronously on + * the same thread immediately after the runtime is created. + * @returns WorkletRuntime which is a + * `jsi::HostObject` - {@link WorkletRuntime} + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ + */ + +export function createWorkletRuntime(nameOrConfig, initializer) { + const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole(); + let name; + let initializerFn; + let useDefaultQueue = true; + let customQueue; + let animationQueuePollingRate; + let enableEventLoop = true; + if (typeof nameOrConfig === 'string') { + name = nameOrConfig; + initializerFn = initializer; + } else { + // TODO: Make anonymous name globally unique. + name = nameOrConfig?.name ?? 'anonymous'; + initializerFn = nameOrConfig?.initializer; + useDefaultQueue = nameOrConfig?.useDefaultQueue ?? true; + customQueue = nameOrConfig?.customQueue; + animationQueuePollingRate = Math.round(nameOrConfig?.animationQueuePollingRate ?? 16); + enableEventLoop = nameOrConfig?.enableEventLoop ?? true; + } + if (initializerFn && !isWorkletFunction(initializerFn)) { + throw new WorkletsError('The initializer passed to `createWorkletRuntime` is not a worklet.'); + } + return WorkletsModule.createWorkletRuntime(name, createSerializable(() => { + 'worklet'; + + setupCallGuard(); + registerWorkletsError(); + setupConsole(runtimeBoundCapturableConsole); + if (enableEventLoop) { + setupRunLoop(animationQueuePollingRate); + } + initializerFn?.(); + }), useDefaultQueue, customQueue, enableEventLoop); } -export function runOnRuntime() { - throw new WorkletsError('`runOnRuntime` is not supported on web.'); -} -export function scheduleOnRuntime() { - throw new WorkletsError('`scheduleOnRuntime` is not supported on web.'); + +// @ts-expect-error Check `runOnUI` overload. + +/** Schedule a worklet to execute on the background queue. */ +export function runOnRuntime(workletRuntime, worklet) { + 'worklet'; + + if (__DEV__ && !SHOULD_BE_USE_WEB && !isWorkletFunction(worklet)) { + throw new WorkletsError('The function passed to `runOnRuntime` is not a worklet.'); + } + if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { + return (...args) => globalThis._scheduleOnRuntime(workletRuntime, makeShareableCloneOnUIRecursive(() => { + 'worklet'; + + worklet(...args); + })); + } + return (...args) => WorkletsModule.scheduleOnRuntime(workletRuntime, createSerializable(() => { + 'worklet'; + + worklet(...args); + globalThis.__flushMicrotasks(); + })); } + +/** Configuration object for creating a worklet runtime. */ //# sourceMappingURL=runtimes.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js.map index 5dc730e2..967ded8b 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.js.map @@ -1 +1 @@ -{"version":3,"names":["WorkletsError","createWorkletRuntime","runOnRuntime","scheduleOnRuntime"],"sourceRoot":"../../src","sources":["runtimes.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,uBAAuB;AAgBrD,OAAO,SAASC,oBAAoBA,CAAA,EAAU;EAC5C,MAAM,IAAID,aAAa,CAAC,iDAAiD,CAAC;AAC5E;AAOA,OAAO,SAASE,YAAYA,CAAA,EAAU;EACpC,MAAM,IAAIF,aAAa,CAAC,yCAAyC,CAAC;AACpE;AAQA,OAAO,SAASG,iBAAiBA,CAAA,EAAU;EACzC,MAAM,IAAIH,aAAa,CAAC,8CAA8C,CAAC;AACzE","ignoreList":[]} +{"version":3,"names":["setupCallGuard","getMemorySafeCapturableConsole","setupConsole","SHOULD_BE_USE_WEB","setupRunLoop","RuntimeKind","createSerializable","makeShareableCloneOnUIRecursive","isWorkletFunction","registerWorkletsError","WorkletsError","WorkletsModule","createWorkletRuntime","nameOrConfig","initializer","runtimeBoundCapturableConsole","name","initializerFn","useDefaultQueue","customQueue","animationQueuePollingRate","enableEventLoop","Math","round","runOnRuntime","workletRuntime","worklet","__DEV__","globalThis","__RUNTIME_KIND","ReactNative","args","_scheduleOnRuntime","scheduleOnRuntime","__flushMicrotasks"],"sourceRoot":"../../src","sources":["runtimes.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js deleted file mode 100644 index c49ee28c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js +++ /dev/null @@ -1,139 +0,0 @@ -'use strict'; - -import { setupCallGuard } from './callGuard'; -import { registerWorkletsError, WorkletsError } from './debug/WorkletsError'; -import { getMemorySafeCapturableConsole, setupConsole } from './initializers/initializers'; -import { createSerializable, makeShareableCloneOnUIRecursive } from './memory/serializable'; -import { setupRunLoop } from './runLoop/workletRuntime'; -import { RuntimeKind } from './runtimeKind'; -import { isWorkletFunction } from './workletFunction'; -import { WorkletsModule } from './WorkletsModule/NativeWorklets'; - -/** - * Lets you create a new JS runtime which can be used to run worklets possibly - * on different threads than JS or UI thread. - * - * @param config - Runtime configuration object - {@link WorkletRuntimeConfig}. - * @returns WorkletRuntime which is a - * `jsi::HostObject` - {@link WorkletRuntime} - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ - */ -// @ts-expect-error Public API overload. - -/** - * @deprecated Please use the new config object signature instead: - * `createWorkletRuntime({ name, initializer })` - * - * Lets you create a new JS runtime which can be used to run worklets possibly - * on different threads than JS or UI thread. - * @param name - A name used to identify the runtime which will appear in - * devices list in Chrome DevTools. - * @param initializer - An optional worklet that will be run synchronously on - * the same thread immediately after the runtime is created. - * @returns WorkletRuntime which is a - * `jsi::HostObject` - {@link WorkletRuntime} - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ - */ - -export function createWorkletRuntime(nameOrConfig, initializer) { - const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole(); - let name; - let initializerFn; - let useDefaultQueue = true; - let customQueue; - let animationQueuePollingRate; - let enableEventLoop = true; - if (typeof nameOrConfig === 'string') { - name = nameOrConfig; - initializerFn = initializer; - } else { - // TODO: Make anonymous name globally unique. - name = nameOrConfig?.name ?? 'anonymous'; - initializerFn = nameOrConfig?.initializer; - useDefaultQueue = nameOrConfig?.useDefaultQueue ?? true; - customQueue = nameOrConfig?.customQueue; - animationQueuePollingRate = Math.round(nameOrConfig?.animationQueuePollingRate ?? 16); - enableEventLoop = nameOrConfig?.enableEventLoop ?? true; - } - if (initializerFn && !isWorkletFunction(initializerFn)) { - throw new WorkletsError('The initializer passed to `createWorkletRuntime` is not a worklet.'); - } - return WorkletsModule.createWorkletRuntime(name, createSerializable(() => { - 'worklet'; - - setupCallGuard(); - registerWorkletsError(); - setupConsole(runtimeBoundCapturableConsole); - if (enableEventLoop) { - setupRunLoop(animationQueuePollingRate); - } - initializerFn?.(); - }), useDefaultQueue, customQueue, enableEventLoop); -} - -/** - * Lets you asynchronously run a - * [worklet](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worklet) - * on a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime). - * - * Check - * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} - * for more information about the different runtime kinds. - * - * - The worklet is scheduled on the Worker Runtime's [Async - * Queue](https://github.com/software-mansion/react-native-reanimated/blob/main/packages/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h) - * - The function cannot be scheduled on the Worker Runtime from [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * or another [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime), - * unless the [Bundle - * Mode](https://docs.swmansion.com/react-native-worklets/docs/experimental/bundleMode) - * is enabled. - * - * @param workletRuntime - The runtime to schedule the worklet on. - * @param worklet - The worklet to schedule. - * @param args - The arguments to pass to the worklet. - * @returns The return value of the worklet. - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. - -export function scheduleOnRuntime(workletRuntime, worklet, ...args) { - 'worklet'; - - if (__DEV__ && !isWorkletFunction(worklet)) { - throw new WorkletsError('The function passed to `scheduleOnRuntime` is not a worklet.'); - } - if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - globalThis._scheduleOnRuntime(workletRuntime, makeShareableCloneOnUIRecursive(() => { - 'worklet'; - - worklet(...args); - })); - } - WorkletsModule.scheduleOnRuntime(workletRuntime, createSerializable(() => { - 'worklet'; - - worklet(...args); - globalThis.__flushMicrotasks(); - })); -} - -/** - * @deprecated Use `scheduleOnRuntime` instead. - * - * Schedule a worklet to execute on the background queue. - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. - -export function runOnRuntime(workletRuntime, worklet) { - 'worklet'; - - if (__DEV__ && !isWorkletFunction(worklet)) { - throw new WorkletsError('The function passed to `runOnRuntime` is not a worklet.'); - } - return (...args) => scheduleOnRuntime(workletRuntime, worklet, ...args); -} -//# sourceMappingURL=runtimes.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js.map deleted file mode 100644 index 152e2c54..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/runtimes.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["setupCallGuard","registerWorkletsError","WorkletsError","getMemorySafeCapturableConsole","setupConsole","createSerializable","makeShareableCloneOnUIRecursive","setupRunLoop","RuntimeKind","isWorkletFunction","WorkletsModule","createWorkletRuntime","nameOrConfig","initializer","runtimeBoundCapturableConsole","name","initializerFn","useDefaultQueue","customQueue","animationQueuePollingRate","enableEventLoop","Math","round","scheduleOnRuntime","workletRuntime","worklet","args","__DEV__","globalThis","__RUNTIME_KIND","ReactNative","_scheduleOnRuntime","__flushMicrotasks","runOnRuntime"],"sourceRoot":"../../src","sources":["runtimes.native.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/specs/NativeWorkletsModule.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/specs/NativeWorkletsModule.js.map index 2022e941..7fde2987 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/specs/NativeWorkletsModule.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/specs/NativeWorkletsModule.js.map @@ -1 +1 @@ -{"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../../src","sources":["specs/NativeWorkletsModule.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAA2BA,mBAAmB,QAAQ,cAAc;AAMpE,eAAeA,mBAAmB,CAACC,GAAG,CAAO,gBAAgB,CAAC","ignoreList":[]} +{"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../../src","sources":["specs/NativeWorkletsModule.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,mBAAmB,QAAQ,cAAc;AAMlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,gBAAgB,CAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js b/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js index a80f7369..17ced554 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js @@ -1,7 +1,7 @@ 'use strict'; -import { RuntimeKind } from '../runtimeKind'; -import RNWorkletsTurboModule from './NativeWorkletsModule'; +import { RuntimeKind } from "../runtimeKind.js"; +import RNWorkletsTurboModule from "./NativeWorkletsModule.js"; export const WorkletsTurboModule = globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative ? RNWorkletsTurboModule : // In Bundle Mode, on Worklet Runtimes `RNWorkletsTurboModule` isn't // available and shouldn't be accessed. We return null here diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js.map index ef302fcb..9f4fa7e3 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/specs/index.js.map @@ -1 +1 @@ -{"version":3,"names":["RuntimeKind","RNWorkletsTurboModule","WorkletsTurboModule","globalThis","__RUNTIME_KIND","ReactNative"],"sourceRoot":"../../../src","sources":["specs/index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,WAAW,QAAQ,gBAAgB;AAE5C,OAAOC,qBAAqB,MAAM,wBAAwB;AAE1D,OAAO,MAAMC,mBAA4C,GACvDC,UAAU,CAACC,cAAc,KAAKJ,WAAW,CAACK,WAAW,GACjDJ,qBAAqB;AACrB;AACA;AACA;AACA,IAAI","ignoreList":[]} +{"version":3,"names":["RuntimeKind","RNWorkletsTurboModule","WorkletsTurboModule","globalThis","__RUNTIME_KIND","ReactNative"],"sourceRoot":"../../../src","sources":["specs/index.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,WAAW,QAAQ,mBAAgB;AAE5C,OAAOC,qBAAqB,MAAM,2BAAwB;AAE1D,OAAO,MAAMC,mBAAgC,GAC3CC,UAAU,CAACC,cAAc,KAAKJ,WAAW,CAACK,WAAW,GACjDJ,qBAAqB;AACrB;AACA;AACA;AACA,IAAI","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js b/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js index ea988b09..9a337f4c 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js @@ -1,36 +1,311 @@ 'use strict'; -import { WorkletsError } from './debug/WorkletsError'; -import { mockedRequestAnimationFrame } from './runLoop/uiRuntime/mockedRequestAnimationFrame'; -export function callMicrotasks() { - // on web flushing is a noop as immediates are handled by the browser -} -export function scheduleOnUI(worklet, ...args) { - enqueueUI(worklet, args); -} -export function runOnUI(worklet) { - return (...args) => { - scheduleOnUI(worklet, ...args); +import { IS_JEST, SHOULD_BE_USE_WEB } from "./PlatformChecker/index.js"; +import { RuntimeKind } from "./runtimeKind.js"; +import { createSerializable, makeShareableCloneOnUIRecursive } from "./serializable.js"; +import { serializableMappingCache } from "./serializableMappingCache.js"; +import { isWorkletFunction } from "./workletFunction.js"; +import { WorkletsError } from "./WorkletsError.js"; +import { WorkletsModule } from "./WorkletsModule/index.js"; +let runOnUIQueue = []; +export function setupMicrotasks() { + 'worklet'; + + let microtasksQueue = []; + let isExecutingMicrotasksQueue = false; + global.queueMicrotask = callback => { + microtasksQueue.push(callback); + }; + global._microtaskQueueFinalizers = []; + global.__callMicrotasks = () => { + if (isExecutingMicrotasksQueue) { + return; + } + try { + isExecutingMicrotasksQueue = true; + for (let index = 0; index < microtasksQueue.length; index += 1) { + // we use classic 'for' loop because the size of the currentTasks array may change while executing some of the callbacks due to queueMicrotask calls + microtasksQueue[index](); + } + microtasksQueue = []; + global._microtaskQueueFinalizers.forEach(finalizer => finalizer()); + } finally { + isExecutingMicrotasksQueue = false; + } }; } -export function runOnUISync() { - throw new WorkletsError('`runOnUISync` is not supported on web.'); +function callMicrotasksOnUIThread() { + 'worklet'; + + global.__callMicrotasks(); } -export function executeOnUIRuntimeSync() { - throw new WorkletsError('`executeOnUIRuntimeSync` is not supported on web.'); +export const callMicrotasks = SHOULD_BE_USE_WEB ? () => { + // on web flushing is a noop as immediates are handled by the browser +} : callMicrotasksOnUIThread; + +/** + * Lets you schedule a function to be executed on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * + * - The callback executes asynchronously and doesn't return a value. + * - Passed function and args are automatically + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * and serialized. + * - This function cannot be called from the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime) + * or [Worker + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worker-worklet-runtime---worker-runtime), + * unless you have the [Bundle Mode](/docs/experimental/bundleMode) enabled. + * + * @param fun - A reference to a function you want to schedule on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * @param args - Arguments to pass to the function. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnUI + */ +export function scheduleOnUI(worklet, ...args) { + runOnUI(worklet)(...args); } + +/** + * Lets you asynchronously run + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). + * + * This method does not schedule the work immediately but instead waits for + * other worklets to be scheduled within the same JS loop. It uses + * queueMicrotask to schedule all the worklets at once making sure they will run + * within the same frame boundaries on the UI thread. + * + * @param fun - A reference to a function you want to execute on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/) + * from the [JavaScript + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). + * @returns A function that accepts arguments for the function passed as the + * first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI @deprecated Use `scheduleOnUI` instead. + */ +// @ts-expect-error This overload is correct since it's what user sees in his code +// before it's transformed by Reanimated Babel plugin. + +export function runOnUI(worklet) { + if (__DEV__ && !SHOULD_BE_USE_WEB && !isWorkletFunction(worklet) && !worklet.__bundleData) { + throw new WorkletsError('`runOnUI` can only be used with worklets.'); + } + return (...args) => { + if (IS_JEST) { + // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask + // callbacks run on the same queue and can be interleaved. There is no way + // to flush particular queue in Jest and the only control over mocked timers + // is by using jest.advanceTimersByTime() method which advances all types + // of timers including immediate and animation callbacks. Ideally we'd like + // to have some way here to schedule work along with React updates, but + // that's not possible, and hence in Jest environment instead of using scheduling + // mechanism we just schedule the work ommiting the queue. This is ok for the + // uses that we currently have but may not be ok for future tests that we write. + WorkletsModule.scheduleOnUI(createSerializable(() => { + 'worklet'; + + worklet(...args); + })); + return; + } + if (__DEV__) { + // in DEV mode we call serializable conversion here because in case the object + // can't be converted, we will get a meaningful stack-trace as opposed to the + // situation when conversion is only done via microtask queue. This does not + // make the app particularily less efficient as converted objects are cached + // and for a given worklet the conversion only happens once. + createSerializable(worklet); + createSerializable(args); + } + enqueueUI(worklet, args); + }; +} +if (__DEV__) { + function runOnUIWorklet() { + 'worklet'; + + throw new WorkletsError('`runOnUI` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'); + } + const serializableRunOnUIWorklet = createSerializable(runOnUIWorklet); + serializableMappingCache.set(runOnUI, serializableRunOnUIWorklet); +} + +/** + * Lets you run a function synchronously on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime) + * from the [RN + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#react-native-runtime-rn-runtime). + * Passed function and args are automatically + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * and serialized. + * + * - This function cannot be called from the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * - This function cannot be called from a [Worker + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worker-worklet-runtime---worker-runtime). + * + * @param fun - A reference to a function you want to execute on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * @param args - Arguments to pass to the function. + * @returns The return value of the function passed as the first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUISync + */ +export function runOnUISync(worklet, ...args) { + return executeOnUIRuntimeSync(worklet)(...args); +} + +// @ts-expect-error Check `executeOnUIRuntimeSync` overload above. + +export function executeOnUIRuntimeSync(worklet) { + return (...args) => { + return WorkletsModule.executeOnUIRuntimeSync(createSerializable(() => { + 'worklet'; + + const result = worklet(...args); + return makeShareableCloneOnUIRecursive(result); + })); + }; +} +function runWorkletOnJS(worklet, ...args) { + // remote function that calls a worklet synchronously on the JS runtime + worklet(...args); +} + +/** + * Lets you asynchronously run + * non-[workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions that couldn't otherwise run on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-thread). + * This applies to most external libraries as they don't have their functions + * marked with "worklet"; directive. + * + * @param fun - A reference to a function you want to execute on the JavaScript + * thread from the UI thread. + * @returns A function that accepts arguments for the function passed as the + * first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnJS + */ +/** @deprecated Use `scheduleOnRN` instead. */ export function runOnJS(fun) { - return (...args) => scheduleOnRN(fun, ...args); + 'worklet'; + + if (SHOULD_BE_USE_WEB || globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { + // if we are already on the JS thread, we just schedule the worklet on the JS queue + return (...args) => queueMicrotask(args.length ? () => fun(...args) : fun); + } + if (isWorkletFunction(fun)) { + // If `fun` is a worklet, we schedule a call of a remote function `runWorkletOnJS` + // and pass the worklet as a first argument followed by original arguments. + + return (...args) => runOnJS(runWorkletOnJS)(fun, ...args); + } + if (fun.__remoteFunction) { + // In development mode the function provided as `fun` throws an error message + // such that when someone accidentally calls it directly on the UI runtime, they + // see that they should use `runOnJS` instead. To facilitate that we put the + // reference to the original remote function in the `__remoteFunction` property. + fun = fun.__remoteFunction; + } + const scheduleOnJS = typeof fun === 'function' ? global._scheduleHostFunctionOnJS : global._scheduleRemoteFunctionOnJS; + return (...args) => { + scheduleOnJS(fun, args.length > 0 ? makeShareableCloneOnUIRecursive(args) : undefined); + }; } + +/** + * Lets you schedule a function to be executed on the RN runtime from any + * runtime. Check + * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} + * for more information about the different runtime kinds. + * + * Scheduling function from the RN Runtime (we are already on RN Runtime) simply + * uses `queueMicrotask`. + * + * When functions need to be scheduled from the UI Runtime, first function and + * args are serialized and then the system passes the scheduling responsibility + * to the JSScheduler. The JSScheduler then uses the RN CallInvoker to schedule + * the function asynchronously on the JavaScript thread by calling + * `jsCallInvoker_->invokeAsync()`. + * + * When called from a Worker Runtime, it uses the same JSScheduler mechanism. + * + * @param fun - A function you want to schedule on the RN runtime. A function + * can be a worklet, a remote function or a regular function. + * @param args - Arguments to pass to the function. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnRN + */ export function scheduleOnRN(fun, ...args) { - queueMicrotask(args.length ? () => fun(...args) : fun); + 'worklet'; + + runOnJS(fun)(...args); } -export function runOnUIAsync(worklet, ...args) { - return new Promise(resolve => { - enqueueUI(worklet, args, resolve); - }); + +/** + * Lets you asynchronously run + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * + * This method does not schedule the work immediately but instead waits for + * other worklets to be scheduled within the same JS loop. It uses + * queueMicrotask to schedule all the worklets at once making sure they will run + * within the same frame boundaries on the UI thread. + * + * @param fun - A reference to a function you want to execute on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * from the [JavaScript + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#javascript-runtime). + * @returns A promise that resolves to the return value of the function passed + * as the first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUIAsync + */ +export function runOnUIAsync(worklet) { + if (__DEV__ && !SHOULD_BE_USE_WEB && !isWorkletFunction(worklet)) { + throw new WorkletsError('`runOnUIAsync` can only be used with worklets.'); + } + return (...args) => { + return new Promise(resolve => { + if (IS_JEST) { + // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask + // callbacks run on the same queue and can be interleaved. There is no way + // to flush particular queue in Jest and the only control over mocked timers + // is by using jest.advanceTimersByTime() method which advances all types + // of timers including immediate and animation callbacks. Ideally we'd like + // to have some way here to schedule work along with React updates, but + // that's not possible, and hence in Jest environment instead of using scheduling + // mechanism we just schedule the work ommiting the queue. This is ok for the + // uses that we currently have but may not be ok for future tests that we write. + WorkletsModule.scheduleOnUI(createSerializable(() => { + 'worklet'; + + worklet(...args); + })); + return; + } + if (__DEV__) { + // in DEV mode we call serializable conversion here because in case the object + // can't be converted, we will get a meaningful stack-trace as opposed to the + // situation when conversion is only done via microtask queue. This does not + // make the app particularily less efficient as converted objects are cached + // and for a given worklet the conversion only happens once. + createSerializable(worklet); + createSerializable(args); + } + enqueueUI(worklet, args, resolve); + }); + }; +} +if (__DEV__) { + function runOnUIAsyncWorklet() { + 'worklet'; + + throw new WorkletsError('`runOnUIAsync` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'); + } + const serializableRunOnUIAsyncWorklet = createSerializable(runOnUIAsyncWorklet); + serializableMappingCache.set(runOnUIAsync, serializableRunOnUIAsyncWorklet); } -let runOnUIQueue = []; function enqueueUI(worklet, args, resolve) { const job = [worklet, args, resolve]; runOnUIQueue.push(job); @@ -42,20 +317,31 @@ function flushUIQueue() { queueMicrotask(() => { const queue = runOnUIQueue; runOnUIQueue = []; - requestAnimationFrameImpl(() => { + WorkletsModule.scheduleOnUI(createSerializable(() => { + 'worklet'; + queue.forEach(([workletFunction, workletArgs, jobResolve]) => { const result = workletFunction(...workletArgs); if (jobResolve) { - jobResolve(result); + runOnJS(jobResolve)(result); } }); - }); + callMicrotasks(); + })); }); } +/** + * Added temporarily for integration with `react-native-audio-api`. Don't depend + * on this API as it may change without notice. + */ // eslint-disable-next-line camelcase -export function unstable_eventLoopTask() { - throw new WorkletsError('`unstable_eventLoopTask` is not supported on web.'); +export function unstable_eventLoopTask(worklet) { + return (...args) => { + 'worklet'; + + worklet(...args); + callMicrotasks(); + }; } -const requestAnimationFrameImpl = !globalThis.requestAnimationFrame ? mockedRequestAnimationFrame : globalThis.requestAnimationFrame; //# sourceMappingURL=threads.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js.map index a0ac3650..9f3e03eb 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/threads.js.map @@ -1 +1 @@ -{"version":3,"names":["WorkletsError","mockedRequestAnimationFrame","callMicrotasks","scheduleOnUI","worklet","args","enqueueUI","runOnUI","runOnUISync","executeOnUIRuntimeSync","runOnJS","fun","scheduleOnRN","queueMicrotask","length","runOnUIAsync","Promise","resolve","runOnUIQueue","job","push","flushUIQueue","queue","requestAnimationFrameImpl","forEach","workletFunction","workletArgs","jobResolve","result","unstable_eventLoopTask","globalThis","requestAnimationFrame"],"sourceRoot":"../../src","sources":["threads.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,aAAa,QAAQ,uBAAuB;AACrD,SAASC,2BAA2B,QAAQ,iDAAiD;AAE7F,OAAO,SAASC,cAAcA,CAAA,EAAS;EACrC;AAAA;AAGF,OAAO,SAASC,YAAYA,CAC1BC,OAAuC,EACvC,GAAGC,IAAU,EACP;EACNC,SAAS,CAACF,OAAO,EAAEC,IAAI,CAAC;AAC1B;AAEA,OAAO,SAASE,OAAOA,CACrBH,OAAuC,EACd;EACzB,OAAO,CAAC,GAAGC,IAAI,KAAK;IAClBF,YAAY,CAACC,OAAO,EAAE,GAAGC,IAAI,CAAC;EAChC,CAAC;AACH;AAOA,OAAO,SAASG,WAAWA,CAAA,EAAU;EACnC,MAAM,IAAIR,aAAa,CAAC,wCAAwC,CAAC;AACnE;AAMA,OAAO,SAASS,sBAAsBA,CAAA,EAAU;EAC9C,MAAM,IAAIT,aAAa,CAAC,mDAAmD,CAAC;AAC9E;AAEA,OAAO,SAASU,OAAOA,CACrBC,GAAmC,EACV;EACzB,OAAO,CAAC,GAAGN,IAAI,KAAKO,YAAY,CAACD,GAAG,EAAE,GAAGN,IAAI,CAAC;AAChD;AAEA,OAAO,SAASO,YAAYA,CAC1BD,GAAmC,EACnC,GAAGN,IAAU,EACP;EACNQ,cAAc,CACZR,IAAI,CAACS,MAAM,GACP,MAAOH,GAAG,CAAoC,GAAGN,IAAI,CAAC,GACrDM,GACP,CAAC;AACH;AAEA,OAAO,SAASI,YAAYA,CAC1BX,OAAuC,EACvC,GAAGC,IAAU,EACS;EACtB,OAAO,IAAIW,OAAO,CAAeC,OAAO,IAAK;IAC3CX,SAAS,CAACF,OAAO,EAAEC,IAAI,EAAEY,OAAO,CAAC;EACnC,CAAC,CAAC;AACJ;AAQA,IAAIC,YAAqB,GAAG,EAAE;AAE9B,SAASZ,SAASA,CAChBF,OAAuC,EACvCC,IAAU,EACVY,OAAsC,EAChC;EACN,MAAME,GAAG,GAAG,CAACf,OAAO,EAAEC,IAAI,EAAEY,OAAO,CAA6B;EAChEC,YAAY,CAACE,IAAI,CAACD,GAAuB,CAAC;EAC1C,IAAID,YAAY,CAACJ,MAAM,KAAK,CAAC,EAAE;IAC7BO,YAAY,CAAC,CAAC;EAChB;AACF;AAEA,SAASA,YAAYA,CAAA,EAAS;EAC5BR,cAAc,CAAC,MAAM;IACnB,MAAMS,KAAK,GAAGJ,YAAY;IAC1BA,YAAY,GAAG,EAAE;IACjBK,yBAAyB,CAAC,MAAM;MAC9BD,KAAK,CAACE,OAAO,CAAC,CAAC,CAACC,eAAe,EAAEC,WAAW,EAAEC,UAAU,CAAC,KAAK;QAC5D,MAAMC,MAAM,GAAGH,eAAe,CAAC,GAAGC,WAAW,CAAC;QAC9C,IAAIC,UAAU,EAAE;UACdA,UAAU,CAACC,MAAM,CAAC;QACpB;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;;AAEA;AACA,OAAO,SAASC,sBAAsBA,CAAA,EAAU;EAC9C,MAAM,IAAI7B,aAAa,CAAC,mDAAmD,CAAC;AAC9E;AAEA,MAAMuB,yBAAyB,GAAG,CAACO,UAAU,CAACC,qBAAqB,GAC/D9B,2BAA2B,GAC3B6B,UAAU,CAACC,qBAAqB","ignoreList":[]} +{"version":3,"names":["IS_JEST","SHOULD_BE_USE_WEB","RuntimeKind","createSerializable","makeShareableCloneOnUIRecursive","serializableMappingCache","isWorkletFunction","WorkletsError","WorkletsModule","runOnUIQueue","setupMicrotasks","microtasksQueue","isExecutingMicrotasksQueue","global","queueMicrotask","callback","push","_microtaskQueueFinalizers","__callMicrotasks","index","length","forEach","finalizer","callMicrotasksOnUIThread","callMicrotasks","scheduleOnUI","worklet","args","runOnUI","__DEV__","__bundleData","enqueueUI","runOnUIWorklet","serializableRunOnUIWorklet","set","runOnUISync","executeOnUIRuntimeSync","result","runWorkletOnJS","runOnJS","fun","globalThis","__RUNTIME_KIND","ReactNative","__remoteFunction","scheduleOnJS","_scheduleHostFunctionOnJS","_scheduleRemoteFunctionOnJS","undefined","scheduleOnRN","runOnUIAsync","Promise","resolve","runOnUIAsyncWorklet","serializableRunOnUIAsyncWorklet","job","flushUIQueue","queue","workletFunction","workletArgs","jobResolve","unstable_eventLoopTask"],"sourceRoot":"../../src","sources":["threads.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js b/frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js deleted file mode 100644 index 22d24cd2..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js +++ /dev/null @@ -1,319 +0,0 @@ -'use strict'; - -import { WorkletsError } from './debug/WorkletsError'; -import { createSerializable, makeShareableCloneOnUIRecursive } from './memory/serializable'; -import { serializableMappingCache } from './memory/serializableMappingCache'; -import { RuntimeKind } from './runtimeKind'; -import { isWorkletFunction } from './workletFunction'; -import { WorkletsModule } from './WorkletsModule/NativeWorklets'; -let runOnUIQueue = []; -export function setupMicrotasks() { - 'worklet'; - - let microtasksQueue = []; - let isExecutingMicrotasksQueue = false; - globalThis.queueMicrotask = callback => { - microtasksQueue.push(callback); - }; - globalThis._microtaskQueueFinalizers = []; - globalThis.__callMicrotasks = () => { - if (isExecutingMicrotasksQueue) { - return; - } - try { - isExecutingMicrotasksQueue = true; - for (let index = 0; index < microtasksQueue.length; index += 1) { - // we use classic 'for' loop because the size of the currentTasks array may change while executing some of the callbacks due to queueMicrotask calls - microtasksQueue[index](); - } - microtasksQueue = []; - globalThis._microtaskQueueFinalizers.forEach(finalizer => finalizer()); - } finally { - isExecutingMicrotasksQueue = false; - } - }; -} -function callMicrotasksOnUIThread() { - 'worklet'; - - globalThis.__callMicrotasks(); -} -export const callMicrotasks = callMicrotasksOnUIThread; - -/** - * Lets you schedule a function to be executed on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - * - The callback executes asynchronously and doesn't return a value. - * - Passed function and args are automatically - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * and serialized. - * - This function cannot be called from the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * or a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime), - * unless you have the [Bundle Mode](/docs/experimental/bundleMode) enabled. - * - * @param fun - A reference to a function you want to schedule on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * @param args - Arguments to pass to the function. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnUI - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. - -export function scheduleOnUI(worklet, ...args) { - if (__DEV__ && !isWorkletFunction(worklet) && !worklet.__bundleData) { - throw new WorkletsError('`scheduleOnUI` can only be used with worklets.'); - } - if (__DEV__) { - // in DEV mode we call serializable conversion here because in case the object - // can't be converted, we will get a meaningful stack-trace as opposed to the - // situation when conversion is only done via microtask queue. This does not - // make the app particularily less efficient as converted objects are cached - // and for a given worklet the conversion only happens once. - createSerializable(worklet); - createSerializable(args); - } - enqueueUI(worklet, args); -} - -/** - * Lets you asynchronously run - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). - * - * This method does not schedule the work immediately but instead waits for - * other worklets to be scheduled within the same JS loop. It uses - * queueMicrotask to schedule all the worklets at once making sure they will run - * within the same frame boundaries on the UI thread. - * - * @param fun - A reference to a function you want to execute on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/) - * from the [JavaScript - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). - * @returns A function that accepts arguments for the function passed as the - * first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI @deprecated Use `scheduleOnUI` instead. - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. - -export function runOnUI(worklet) { - if (__DEV__ && !isWorkletFunction(worklet) && !worklet.__bundleData) { - throw new WorkletsError('`runOnUI` can only be used with worklets.'); - } - return (...args) => { - scheduleOnUI(worklet, ...args); - }; -} -if (__DEV__) { - function runOnUIWorklet() { - 'worklet'; - - throw new WorkletsError('`runOnUI` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'); - } - const serializableRunOnUIWorklet = createSerializable(runOnUIWorklet); - serializableMappingCache.set(runOnUI, serializableRunOnUIWorklet); -} - -/** - * Lets you run a function synchronously on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * from the [RN - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#rn-runtime). - * Passed function and args are automatically - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * and serialized. - * - * - This function cannot be called from the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - This function cannot be called from a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime). - * - * @param fun - A reference to a function you want to execute on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * @param args - Arguments to pass to the function. - * @returns The return value of the function passed as the first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUISync - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. - -export function runOnUISync(worklet, ...args) { - return WorkletsModule.executeOnUIRuntimeSync(createSerializable(() => { - 'worklet'; - - const result = worklet(...args); - return makeShareableCloneOnUIRecursive(result); - })); -} - -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. - -export function executeOnUIRuntimeSync(worklet) { - return (...args) => { - return runOnUISync(worklet, ...args); - }; -} -function runWorkletOnJS(worklet, ...args) { - // remote function that calls a worklet synchronously on the JS runtime - worklet(...args); -} - -/** - * Lets you schedule a function to be executed on the RN runtime from any - * runtime. Check - * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} - * for more information about the different runtime kinds. - * - * Scheduling function from the RN Runtime (we are already on RN Runtime) simply - * uses `queueMicrotask`. - * - * When functions need to be scheduled from the UI Runtime, first function and - * args are serialized and then the system passes the scheduling responsibility - * to the JSScheduler. The JSScheduler then uses the RN CallInvoker to schedule - * the function asynchronously on the JavaScript thread by calling - * `jsCallInvoker_->invokeAsync()`. - * - * When called from a Worker Runtime, it uses the same JSScheduler mechanism. - * - * @param fun - A function you want to schedule on the RN runtime. A function - * can be a worklet, a remote function or a regular function. - * @param args - Arguments to pass to the function. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnRN - */ -export function scheduleOnRN(fun, ...args) { - 'worklet'; - - if (globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { - // if we are already on the JS thread, we just schedule the worklet on the JS queue - queueMicrotask(args.length ? () => fun(...args) : fun); - return; - } - if (isWorkletFunction(fun)) { - // If `fun` is a worklet, we schedule a call of a remote function `runWorkletOnJS` - // and pass the worklet as a first argument followed by original arguments. - scheduleOnRN(runWorkletOnJS, fun, ...args); - return; - } - if (fun.__remoteFunction) { - // In development mode the function provided as `fun` throws an error message - // such that when someone accidentally calls it directly on the UI runtime, they - // see that they should use `runOnJS` instead. To facilitate that we put the - // reference to the original remote function in the `__remoteFunction` property. - fun = fun.__remoteFunction; - } - const scheduleOnRNImpl = typeof fun === 'function' ? globalThis._scheduleHostFunctionOnJS : globalThis._scheduleRemoteFunctionOnJS; - scheduleOnRNImpl(fun, args.length > 0 ? makeShareableCloneOnUIRecursive(args) : undefined); -} - -/** - * Lets you asynchronously run - * non-[workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions that couldn't otherwise run on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-thread). - * This applies to most external libraries as they don't have their functions - * marked with "worklet"; directive. - * - * @param fun - A reference to a function you want to execute on the JavaScript - * thread from the UI thread. - * @returns A function that accepts arguments for the function passed as the - * first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnJS - */ -/** @deprecated Use `scheduleOnRN` instead. */ -export function runOnJS(fun) { - 'worklet'; - - return (...args) => { - scheduleOnRN(fun, ...args); - }; -} - -/** - * Lets you asynchronously run - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - * This method does not schedule the work immediately but instead waits for - * other worklets to be scheduled within the same JS loop. It uses - * queueMicrotask to schedule all the worklets at once making sure they will run - * within the same frame boundaries on the UI thread. - * - * @param fun - A reference to a function you want to execute on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * from the [JavaScript - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#javascript-runtime). - * @returns A promise that resolves to the return value of the function passed - * as the first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUIAsync - */ -export function runOnUIAsync(worklet, ...args) { - if (__DEV__ && !isWorkletFunction(worklet)) { - throw new WorkletsError('`runOnUIAsync` can only be used with worklets.'); - } - return new Promise(resolve => { - if (__DEV__) { - // in DEV mode we call serializable conversion here because in case the object - // can't be converted, we will get a meaningful stack-trace as opposed to the - // situation when conversion is only done via microtask queue. This does not - // make the app particularily less efficient as converted objects are cached - // and for a given worklet the conversion only happens once. - createSerializable(worklet); - createSerializable(args); - } - enqueueUI(worklet, args, resolve); - }); -} -if (__DEV__) { - function runOnUIAsyncWorklet() { - 'worklet'; - - throw new WorkletsError('`runOnUIAsync` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'); - } - const serializableRunOnUIAsyncWorklet = createSerializable(runOnUIAsyncWorklet); - serializableMappingCache.set(runOnUIAsync, serializableRunOnUIAsyncWorklet); -} -function enqueueUI(worklet, args, resolve) { - const job = [worklet, args, resolve]; - runOnUIQueue.push(job); - if (runOnUIQueue.length === 1) { - flushUIQueue(); - } -} -function flushUIQueue() { - queueMicrotask(() => { - const queue = runOnUIQueue; - runOnUIQueue = []; - WorkletsModule.scheduleOnUI(createSerializable(() => { - 'worklet'; - - queue.forEach(([workletFunction, workletArgs, jobResolve]) => { - const result = workletFunction(...workletArgs); - if (jobResolve) { - runOnJS(jobResolve)(result); - } - }); - callMicrotasks(); - })); - }); -} - -/** - * Added temporarily for integration with `react-native-audio-api`. Don't depend - * on this API as it may change without notice. - */ -// eslint-disable-next-line camelcase -export function unstable_eventLoopTask(worklet) { - return (...args) => { - 'worklet'; - - worklet(...args); - callMicrotasks(); - }; -} -//# sourceMappingURL=threads.native.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js.map deleted file mode 100644 index 868f1575..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/threads.native.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["WorkletsError","createSerializable","makeShareableCloneOnUIRecursive","serializableMappingCache","RuntimeKind","isWorkletFunction","WorkletsModule","runOnUIQueue","setupMicrotasks","microtasksQueue","isExecutingMicrotasksQueue","globalThis","queueMicrotask","callback","push","_microtaskQueueFinalizers","__callMicrotasks","index","length","forEach","finalizer","callMicrotasksOnUIThread","callMicrotasks","scheduleOnUI","worklet","args","__DEV__","__bundleData","enqueueUI","runOnUI","runOnUIWorklet","serializableRunOnUIWorklet","set","runOnUISync","executeOnUIRuntimeSync","result","runWorkletOnJS","scheduleOnRN","fun","__RUNTIME_KIND","ReactNative","__remoteFunction","scheduleOnRNImpl","_scheduleHostFunctionOnJS","_scheduleRemoteFunctionOnJS","undefined","runOnJS","runOnUIAsync","Promise","resolve","runOnUIAsyncWorklet","serializableRunOnUIAsyncWorklet","job","flushUIQueue","queue","workletFunction","workletArgs","jobResolve","unstable_eventLoopTask"],"sourceRoot":"../../src","sources":["threads.native.ts"],"mappings":"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","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/types.js b/frontend-admin/node_modules/react-native-worklets/lib/module/types.js deleted file mode 100644 index 97fa9a3b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/types.js +++ /dev/null @@ -1,5 +0,0 @@ -/* eslint-disable reanimated/use-global-this */ -'use strict'; - -export {}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/types.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/types.js.map deleted file mode 100644 index 7fb15deb..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"AAAA;AACA,YAAY;;AAAC","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js b/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js index fd28c788..dca4b1fb 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js @@ -2,8 +2,9 @@ /** * This function allows you to determine if a given function is a worklet. It - * only works with Worklets Babel plugin enabled. Unless you are doing something - * with internals of Worklets you shouldn't need to use this function. + * only works with Reanimated Babel plugin enabled. Unless you are doing + * something with internals of Reanimated you shouldn't need to use this + * function. * * ### Note * diff --git a/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js.map b/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js.map index 18883e8d..9a340ad0 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/module/workletFunction.js.map @@ -1 +1 @@ -{"version":3,"names":["isWorkletFunction","value","__workletHash"],"sourceRoot":"../../src","sources":["workletFunction.ts"],"mappings":"AAAA,YAAY;;AAIZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAG/BC,KAAc,EAA+C;EAC7D,SAAS;;EACT;EACA;EAEA;IACE;IACA,OAAOA,KAAK,KAAK,UAAU,IAC3B,CAAC,CAAEA,KAAK,CAAwCC;EAAa;AAEjE","ignoreList":[]} +{"version":3,"names":["isWorkletFunction","value","__workletHash"],"sourceRoot":"../../src","sources":["workletFunction.ts"],"mappings":"AAAA,YAAY;;AAIZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAG/BC,KAAc,EAA+C;EAC7D,SAAS;;EACT;EACA;EAEA;IACE;IACA,OAAOA,KAAK,KAAK,UAAU,IAC3B,CAAC,CAAEA,KAAK,CAAwCC;EAAa;AAEjE","ignoreList":[]} diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts index 93f3b676..3bb441ec 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts @@ -1,4 +1,3 @@ import type { IWorkletsModule } from './workletsModuleProxy'; -export type { IWorkletsModule, WorkletsModuleProxy, } from './workletsModuleProxy'; -export declare const WorkletsModule: IWorkletsModule; +export declare function createNativeWorkletsModule(): IWorkletsModule; //# sourceMappingURL=NativeWorklets.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map index d9a0e350..781cf266 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"NativeWorklets.d.ts","sourceRoot":"","sources":["../../../src/WorkletsModule/NativeWorklets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,YAAY,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,cAAc,EAAE,eAAuB,CAAC"} \ No newline at end of file +{"version":3,"file":"NativeWorklets.d.ts","sourceRoot":"","sources":["../../../src/WorkletsModule/NativeWorklets.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,0BAA0B,IAAI,eAAe,CAE5D"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts deleted file mode 100644 index b5f94ff0..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { IWorkletsModule } from './workletsModuleProxy'; -export declare const WorkletsModule: IWorkletsModule; -//# sourceMappingURL=NativeWorklets.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts.map deleted file mode 100644 index ba817e90..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/NativeWorklets.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"NativeWorklets.native.d.ts","sourceRoot":"","sources":["../../../src/WorkletsModule/NativeWorklets.native.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAsQ/B,eAAO,MAAM,cAAc,EAAE,eAAsC,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts index 15d57e12..f087529d 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts @@ -1,5 +1,5 @@ -import type { SerializableRef, SynchronizableRef } from '../memory/types'; -import type { WorkletRuntime } from '../types'; +import type { SynchronizableRef } from '../synchronizable'; +import type { SerializableRef, WorkletRuntime } from '../workletTypes'; /** Type of `__workletsModuleProxy` injected with JSI. */ export interface WorkletsModuleProxy { createSerializable(value: TValue, shouldPersistRemote: boolean, nativeStateSource?: object): SerializableRef; @@ -19,8 +19,6 @@ export interface WorkletsModuleProxy { createSerializableInitializer(obj: object): SerializableRef; createSerializableFunction(func: (...args: TArgs) => TReturn): SerializableRef; createSerializableWorklet(worklet: object, shouldPersistRemote: boolean): SerializableRef; - createCustomSerializable(data: SerializableRef, typeId: number): SerializableRef; - registerCustomSerializable(determine: SerializableRef, pack: SerializableRef, unpack: SerializableRef, typeId: number): void; scheduleOnUI(serializable: SerializableRef): void; executeOnUIRuntimeSync(serializable: SerializableRef): TReturn; createWorkletRuntime(name: string, initializer: SerializableRef<() => void>, useDefaultQueue: boolean, customQueue: object | undefined, enableEventLoop: boolean): WorkletRuntime; diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map index 9bc72100..b5b76d2d 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/WorkletsModule/workletsModuleProxy.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"workletsModuleProxy.d.ts","sourceRoot":"","sources":["../../../src/WorkletsModule/workletsModuleProxy.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"workletsModuleProxy.d.ts","sourceRoot":"","sources":["../../../src/WorkletsModule/workletsModuleProxy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts deleted file mode 100644 index 47624869..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** Used only with debug builds. */ -export declare function callGuardDEV(fn: (...args: Args) => ReturnValue, ...args: Args): ReturnValue | void; -export declare function setupCallGuard(): void; -//# sourceMappingURL=callGuard.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts.map deleted file mode 100644 index ffb81844..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/callGuard.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"callGuard.native.d.ts","sourceRoot":"","sources":["../../src/callGuard.native.ts"],"names":[],"mappings":"AAIA,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EAClC,GAAG,IAAI,EAAE,IAAI,GACZ,WAAW,GAAG,IAAI,CAiBpB;AAED,wBAAgB,cAAc,SAK7B"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts deleted file mode 100644 index c520f12d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { IWorkletsErrorConstructor } from './types'; -export declare const WorkletsError: IWorkletsErrorConstructor; -//# sourceMappingURL=WorkletsError.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts.map deleted file mode 100644 index aa8e3e1f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WorkletsError.d.ts","sourceRoot":"","sources":["../../../src/debug/WorkletsError.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,SAAS,CAAC;AAWjB,eAAO,MAAM,aAAa,EACI,yBAAyB,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts deleted file mode 100644 index 40ba38f5..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { IWorkletsErrorConstructor } from './types'; -/** - * Registers WorkletsError in the global scope. Register only for Worklet - * runtimes. - */ -export declare function registerWorkletsError(): void; -export declare const WorkletsError: IWorkletsErrorConstructor; -//# sourceMappingURL=WorkletsError.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts.map deleted file mode 100644 index 55fe36e7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/WorkletsError.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WorkletsError.native.d.ts","sourceRoot":"","sources":["../../../src/debug/WorkletsError.native.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,SAAS,CAAC;AAYjB;;;GAGG;AACH,wBAAgB,qBAAqB,SAMpC;AAED,eAAO,MAAM,aAAa,EACI,yBAAyB,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts deleted file mode 100644 index c469aa94..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare function checkCppVersion(): void; -export declare function matchVersion(version1: string, version2: string): boolean; -//# sourceMappingURL=checkCppVersion.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts.map deleted file mode 100644 index ad34fd1c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/checkCppVersion.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"checkCppVersion.d.ts","sourceRoot":"","sources":["../../../src/debug/checkCppVersion.ts"],"names":[],"mappings":"AAMA,wBAAgB,eAAe,SAgB9B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAU9D"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts deleted file mode 100644 index c7b6b4dd..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { WorkletStackDetails } from '../types'; -export declare function registerWorkletStackDetails(hash: number, stackDetails: WorkletStackDetails): void; -export interface RNError extends Error { - jsEngine: string; -} -/** - * Remote error is an error coming from a Worklet Runtime that we bubble up to - * the RN Runtime. - */ -export declare function reportFatalRemoteError({ message, stack, name, jsEngine }: RNError, force: boolean): void; -/** - * Registers `reportFatalRemoteError` function in global scope to allow to - * invoke it from C++. - */ -export declare function registerReportFatalRemoteError(): void; -//# sourceMappingURL=errors.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts.map deleted file mode 100644 index 7d68d8e1..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/errors.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"errors.native.d.ts","sourceRoot":"","sources":["../../../src/debug/errors.native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAKpD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,mBAAmB,QAGlC;AAoCD,MAAM,WAAW,OAAQ,SAAQ,KAAK;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAC3C,KAAK,EAAE,OAAO,GACb,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,SAE7C"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts deleted file mode 100644 index fab3e34b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * We hardcode the version of Worklets here in order to compare it with the - * version used to build the native part of the library in runtime. Remember to - * keep this in sync with the version declared in `package.json` - */ -export declare const jsVersion = "0.7.2"; -//# sourceMappingURL=jsVersion.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts.map deleted file mode 100644 index 960e27be..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/jsVersion.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"jsVersion.d.ts","sourceRoot":"","sources":["../../../src/debug/jsVersion.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,SAAS,UAAU,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts deleted file mode 100644 index c8ff73d7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare const logger: { - warn(message: string): void; - error(message: string): void; -}; -//# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts.map deleted file mode 100644 index e632e746..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/logger.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/debug/logger.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM;kBACH,MAAM;mBAGL,MAAM;CAGtB,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts deleted file mode 100644 index fd8dfa2a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type WorkletsError = Error & { - name: 'Worklets'; -}; -export interface IWorkletsErrorConstructor extends Error { - new (message?: string): WorkletsError; - (message?: string): WorkletsError; - readonly prototype: WorkletsError; -} -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts.map deleted file mode 100644 index 760f0baf..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/debug/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/debug/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,yBAA0B,SAAQ,KAAK;IACtD,KAAK,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACtC,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;CACnC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts index 811e1ff0..d94a6fb1 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts @@ -1,5 +1,5 @@ -import { isSerializableRef, makeShareable, makeShareableCloneOnUIRecursive } from './memory/serializable'; -import type { SerializableRef } from './memory/types'; +import { isSerializableRef, makeShareable, makeShareableCloneOnUIRecursive } from './serializable'; +import type { SerializableRef } from './workletTypes'; /** @deprecated Use {@link SerializableRef} instead. */ export type ShareableRef = SerializableRef; export { makeShareable, makeShareableCloneOnUIRecursive }; @@ -11,6 +11,9 @@ export declare const makeShareableCloneRecursive: MakeShareableClone; export declare const isShareableRef: typeof isSerializableRef; /** @deprecated Use {@link serializableMappingCache} instead. */ export declare const shareableMappingCache: { + set(): void; + get(): null; +} | { set(serializable: object, serializableRef?: SerializableRef): void; get: (key: object) => symbol | SerializableRef | undefined; }; diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts.map index e6b5d9f2..4e78f5f6 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/deprecated.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"deprecated.d.ts","sourceRoot":"","sources":["../../src/deprecated.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,uDAAuD;AACvD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,+BAA+B,EAAE,CAAC;AAE1D,gEAAgE;AAChE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EACR,mBAAmB,CAAC,EAAE,OAAO,EAC7B,KAAK,CAAC,EAAE,MAAM,KACX,YAAY,CAAC,CAAC,CAAC,CAAC;AAErB,0DAA0D;AAC1D,eAAO,MAAM,2BAA2B,EAAE,kBACtB,CAAC;AAErB,yDAAyD;AACzD,eAAO,MAAM,cAAc,0BAAoB,CAAC;AAEhD,gEAAgE;AAChE,eAAO,MAAM,qBAAqB;;;CAA2B,CAAC"} \ No newline at end of file +{"version":3,"file":"deprecated.d.ts","sourceRoot":"","sources":["../../src/deprecated.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,+BAA+B,EAChC,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,uDAAuD;AACvD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,+BAA+B,EAAE,CAAC;AAE1D,gEAAgE;AAChE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EACR,mBAAmB,CAAC,EAAE,OAAO,EAC7B,KAAK,CAAC,EAAE,MAAM,KACX,YAAY,CAAC,CAAC,CAAC,CAAC;AAErB,0DAA0D;AAC1D,eAAO,MAAM,2BAA2B,EAAE,kBACtB,CAAC;AAErB,yDAAyD;AACzD,eAAO,MAAM,cAAc,0BAAoB,CAAC;AAEhD,gEAAgE;AAChE,eAAO,MAAM,qBAAqB;;;;;;CAA2B,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts deleted file mode 100644 index 219ba51b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { DynamicFlagName, StaticFeatureFlagsSchema } from './types'; -export declare function getStaticFeatureFlag(_name: keyof StaticFeatureFlagsSchema): boolean; -export declare function setDynamicFeatureFlag(_name: DynamicFlagName, _value: boolean): void; -export declare function getDynamicFeatureFlag(_name: DynamicFlagName): boolean; -//# sourceMappingURL=featureFlags.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts.map deleted file mode 100644 index 23c4a9bf..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"featureFlags.d.ts","sourceRoot":"","sources":["../../../src/featureFlags/featureFlags.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEzE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,wBAAwB,GACpC,OAAO,CAET;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,OAAO,GACd,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAErE"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts deleted file mode 100644 index 83b83a43..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { DynamicFlagName, DynamicFlagsType, StaticFeatureFlagsSchema } from './types'; -export declare const DynamicFlags: DynamicFlagsType; -export declare function setDynamicFeatureFlag(name: DynamicFlagName, value: boolean): void; -export declare function getDynamicFeatureFlag(name: DynamicFlagName): boolean; -export declare function getStaticFeatureFlag(name: keyof StaticFeatureFlagsSchema): boolean; -//# sourceMappingURL=featureFlags.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts.map deleted file mode 100644 index 2c94b500..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/featureFlags.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"featureFlags.native.d.ts","sourceRoot":"","sources":["../../../src/featureFlags/featureFlags.native.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,YAAY,EAAE,gBAiC1B,CAAC;AAIF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,OAAO,GACb,IAAI,CAEN;AAGD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAEpE;AAID,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,wBAAwB,GACnC,OAAO,CAOT"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts deleted file mode 100644 index 20a9de16..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export type DynamicFlagsType = { - EXAMPLE_DYNAMIC_FLAG: boolean; - init(): void; - setFlag(name: DynamicFlagName, value: boolean): void; - getFlag(name: DynamicFlagName): boolean; -}; -export type DynamicFlagName = keyof Omit, 'init'>; -/** - * This constant is needed for typechecking and preserving static typechecks in - * generated .d.ts files. Without it, the static flags resolve to an object - * without specific keys. - */ -export declare const DefaultStaticFeatureFlags: { - readonly RUNTIME_TEST_FLAG: false; - readonly IOS_DYNAMIC_FRAMERATE_ENABLED: false; -}; -export type StaticFeatureFlagsSchema = { - -readonly [K in keyof typeof DefaultStaticFeatureFlags]: boolean; -}; -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts.map deleted file mode 100644 index 6006272a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/featureFlags/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/featureFlags/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACrD,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,CACtC,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAAC,EAC7C,MAAM,CACP,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;CAGY,CAAC;AAEnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,CAAC,UAAU,CAAC,IAAI,MAAM,OAAO,yBAAyB,GAAG,OAAO;CACjE,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts index 44d9dcde..ea94cb30 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts @@ -1,15 +1,17 @@ -export { isShareableRef, makeShareable, type MakeShareableClone, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive, shareableMappingCache, type ShareableRef, } from './deprecated'; -export { getDynamicFeatureFlag, getStaticFeatureFlag, setDynamicFeatureFlag, } from './featureFlags/featureFlags'; -export { isSynchronizable } from './memory/isSynchronizable'; -export { createSerializable, isSerializableRef, registerCustomSerializable, } from './memory/serializable'; -export { serializableMappingCache } from './memory/serializableMappingCache'; -export { createSynchronizable } from './memory/synchronizable'; -export type { RegistrationData, SerializableRef, Synchronizable, SynchronizableRef, } from './memory/types'; +import './publicGlobals'; +export type { MakeShareableClone, ShareableRef } from './deprecated'; +export { isShareableRef, makeShareable, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive, shareableMappingCache, } from './deprecated'; +export { getStaticFeatureFlag, setDynamicFeatureFlag } from './featureFlags'; +export { isSynchronizable } from './isSynchronizable'; export { getRuntimeKind, RuntimeKind } from './runtimeKind'; -export { createWorkletRuntime, runOnRuntime, scheduleOnRuntime, } from './runtimes'; +export { createWorkletRuntime, runOnRuntime } from './runtimes'; +export { createSerializable, isSerializableRef } from './serializable'; +export { serializableMappingCache } from './serializableMappingCache'; +export type { Synchronizable } from './synchronizable'; +export { createSynchronizable } from './synchronizable'; export { callMicrotasks, executeOnUIRuntimeSync, runOnJS, runOnUI, runOnUIAsync, runOnUISync, scheduleOnRN, scheduleOnUI, unstable_eventLoopTask, } from './threads'; -export type { WorkletFunction, WorkletRuntime, WorkletStackDetails, } from './types'; export { isWorkletFunction } from './workletFunction'; -export { WorkletsModule } from './WorkletsModule/NativeWorklets'; -export type { IWorkletsModule, WorkletsModuleProxy, } from './WorkletsModule/workletsModuleProxy'; +export type { IWorkletsModule, WorkletsModuleProxy } from './WorkletsModule'; +export { WorkletsModule } from './WorkletsModule'; +export type { SerializableRef, WorkletFunction, WorkletRuntime, WorkletStackDetails, } from './workletTypes'; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts.map index 776494ff..ab805a0c 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,cAAc,EACd,aAAa,EACb,KAAK,kBAAkB,EACvB,+BAA+B,EAC/B,2BAA2B,EAC3B,qBAAqB,EACrB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,OAAO,EACP,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EAEZ,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,sCAAsC,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,iBAAiB,CAAC;AAOzB,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,cAAc,EACd,aAAa,EACb,+BAA+B,EAC/B,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,OAAO,EACP,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EAEZ,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts deleted file mode 100644 index d308ca63..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function init(): void; -//# sourceMappingURL=initializers.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts.map deleted file mode 100644 index bc65b110..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"initializers.d.ts","sourceRoot":"","sources":["../../../src/initializers/initializers.ts"],"names":[],"mappings":"AAMA,wBAAgB,IAAI,SAcnB"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts deleted file mode 100644 index 35b45ff1..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Currently there seems to be a bug in the JSI layer which causes a crash when - * we try to copy some of the console methods, i.e. `clear` or `dirxml`. - * - * The crash happens only in React Native 0.75. It's not reproducible in neither - * 0.76 nor 0.74. It also happens only in the configuration of a debug app and - * production bundle. - * - * I haven't yet discovered what exactly causes the crash. It's tied to the - * console methods sometimes being `HostFunction`s. Therefore, as a workaround - * we don't copy the methods as they are in the original console object, we copy - * JavaScript wrappers instead. - */ -export declare function getMemorySafeCapturableConsole(): typeof console; -export declare function setupConsole(boundCapturableConsole: typeof console): void; -export declare function init(): void; -//# sourceMappingURL=initializers.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts.map deleted file mode 100644 index ea14f741..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/initializers.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"initializers.native.d.ts","sourceRoot":"","sources":["../../../src/initializers/initializers.native.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,OAAO,CA8B/D;AAED,wBAAgB,YAAY,CAAC,sBAAsB,EAAE,OAAO,OAAO,QAWlE;AAID,wBAAgB,IAAI,SAcnB"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts deleted file mode 100644 index fe4a7b12..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function bundleModeInit(): void; -//# sourceMappingURL=workletRuntimeEntry.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts.map deleted file mode 100644 index 3205af30..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"workletRuntimeEntry.d.ts","sourceRoot":"","sources":["../../../src/initializers/workletRuntimeEntry.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,SAE7B"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts deleted file mode 100644 index 604900da..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * This function is an entry point for Worklet Runtimes. We can use it to setup - * necessary tools, like the ValueUnpacker. - * - * We must throw an error at the end of this function to prevent the bundle to - * continue executing. This is because the next module to be ran would be the - * React Native one, and it would break the Worklet Runtime if initialized. The - * error is caught in C++ code. - * - * This function has no effect on the RN Runtime beside setting the - * `_WORKLETS_BUNDLE_MODE` flag. - */ -export declare function bundleModeInit(): void; -//# sourceMappingURL=workletRuntimeEntry.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts.map deleted file mode 100644 index 81295a99..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/initializers/workletRuntimeEntry.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"workletRuntimeEntry.native.d.ts","sourceRoot":"","sources":["../../../src/initializers/workletRuntimeEntry.native.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,SAkB7B"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts deleted file mode 100644 index b7ce0a1c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { WorkletFunction } from '../types'; -export declare function bundleValueUnpacker(objectToUnpack: ObjectToUnpack, category?: string, remoteFunctionName?: string): unknown; -interface ObjectToUnpack extends WorkletFunction { - _recur: unknown; -} -export {}; -//# sourceMappingURL=bundleUnpacker.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts.map deleted file mode 100644 index c8fa0e63..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/bundleUnpacker.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bundleUnpacker.native.d.ts","sourceRoot":"","sources":["../../../src/memory/bundleUnpacker.native.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhE,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CA4BT;AAiCD,UAAU,cAAe,SAAQ,eAAe;IAC9C,MAAM,EAAE,OAAO,CAAC;CACjB"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts deleted file mode 100644 index cb4143b7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare function __installUnpacker(): void; -export type CustomSerializableUnpacker = (object: unknown, typeId: number) => unknown; -//# sourceMappingURL=customSerializableUnpacker.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts.map deleted file mode 100644 index 1d8d3e99..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/customSerializableUnpacker.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"customSerializableUnpacker.native.d.ts","sourceRoot":"","sources":["../../../src/memory/customSerializableUnpacker.native.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,SAoBhC;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,KACX,OAAO,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts deleted file mode 100644 index 59f8a506..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Synchronizable } from './types'; -export declare function isSynchronizable(_value: unknown): _value is Synchronizable; -//# sourceMappingURL=isSynchronizable.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts.map deleted file mode 100644 index 9a688da7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"isSynchronizable.d.ts","sourceRoot":"","sources":["../../../src/memory/isSynchronizable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,gBAAgB,CAAC,MAAM,EACrC,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,CAElC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts deleted file mode 100644 index 80f80156..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Synchronizable } from './types'; -export declare function isSynchronizable(value: unknown): value is Synchronizable; -//# sourceMappingURL=isSynchronizable.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts.map deleted file mode 100644 index cd914fb2..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/isSynchronizable.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"isSynchronizable.native.d.ts","sourceRoot":"","sources":["../../../src/memory/isSynchronizable.native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,gBAAgB,CAAC,MAAM,EACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,CAQjC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts deleted file mode 100644 index 3d62eb28..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { FlatSerializableRef, RegistrationData, SerializableRef } from './types'; -export declare function isSerializableRef(value: unknown): value is SerializableRef; -export declare function createSerializable(value: TValue): SerializableRef; -export declare function makeShareableCloneOnUIRecursive(value: TValue): FlatSerializableRef; -export declare function makeShareable(value: TValue): TValue; -export declare function registerCustomSerializable(_registrationData: RegistrationData): void; -//# sourceMappingURL=serializable.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts.map deleted file mode 100644 index 318f96b3..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"serializable.d.ts","sourceRoot":"","sources":["../../../src/memory/serializable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,iBAAiB,CAAC,MAAM,GAAG,OAAO,EAChD,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,CAElC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EACvC,KAAK,EAAE,MAAM,GACZ,eAAe,CAAC,MAAM,CAAC,CAEzB;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EACpD,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAAC,MAAM,CAAC,CAE7B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,0BAA0B,CACxC,MAAM,SAAS,MAAM,EACrB,OAAO,SAAS,MAAM,EACtB,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,QAErD"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts deleted file mode 100644 index 9bd16e6d..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { FlatSerializableRef, RegistrationData, SerializableRef } from './types'; -export declare function isSerializableRef(value: unknown): value is SerializableRef; -export declare function createSerializable(value: TValue, shouldPersistRemote?: boolean, depth?: number): SerializableRef; -export declare namespace createSerializable { - var __bundleData: { - imported: string; - source: number; - }; -} -/** - * `registerCustomSerializable` lets you register your own pre-serialization and - * post-deserialization logic. This is necessary for objects with prototypes - * different than just `Object.prototype` or some other built-in prototypes like - * `Map` etc. Worklets can't handle such objects by default to convert into - * [Serializables](https://docs.swmansion.com/react-native-worklets/docs/memory/serializable) - * hence you need to register them as **Custom Serializables**. This way you can - * tell Worklets how to transfer your custom data structures between different - * Runtimes without manually serializing and deserializing them every time. - * - * @param registrationData - The registration data for the custom serializable - - * {@link RegistrationData} - * @see https://docs.swmansion.com/react-native-worklets/docs/memory/registerCustomSerializable/ - */ -export declare function registerCustomSerializable(registrationData: RegistrationData): void; -declare function makeShareableCloneOnUIRecursiveLEGACY(value: TValue): FlatSerializableRef; -/** @deprecated This function is no longer supported. */ -export declare const makeShareableCloneOnUIRecursive: typeof makeShareableCloneOnUIRecursiveLEGACY; -/** - * This function creates a value on UI with persistent state - changes to it on - * the UI thread will be seen by all worklets. Use it when you want to create a - * value that is read and written only on the UI thread. - * - * @deprecated This function is no longer supported. - */ -export declare function makeShareable(value: TValue): TValue; -export {}; -//# sourceMappingURL=serializable.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts.map deleted file mode 100644 index d46acae0..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializable.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"serializable.native.d.ts","sourceRoot":"","sources":["../../../src/memory/serializable.native.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAGhB,MAAM,SAAS,CAAC;AAajB,wBAAgB,iBAAiB,CAAC,MAAM,GAAG,OAAO,EAChD,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,CAQlC;AAqFD,wBAAgB,kBAAkB,CAAC,MAAM,EACvC,KAAK,EAAE,MAAM,EACb,mBAAmB,UAAQ,EAC3B,KAAK,SAAI,GACR,eAAe,CAAC,MAAM,CAAC,CAyGzB;yBA7Ge,kBAAkB;;;;;;AA6HlC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,SAAS,MAAM,EACrB,OAAO,SAAS,MAAM,EACtB,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,QA+BpD;AAkeD,iBAAS,qCAAqC,CAAC,MAAM,EACnD,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAAC,MAAM,CAAC,CAkF7B;AAED,wDAAwD;AACxD,eAAO,MAAM,+BAA+B,EAIvC,OAAO,qCAAqC,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAY1E"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts deleted file mode 100644 index 3a74fad7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { SerializableRef } from './types'; -export declare const serializableMappingCache: { - set(_serializable: object, _serializableRef?: SerializableRef): void; - get(_key: object): object | symbol | SerializableRef; -}; -//# sourceMappingURL=serializableMappingCache.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts.map deleted file mode 100644 index 0c555d64..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"serializableMappingCache.d.ts","sourceRoot":"","sources":["../../../src/memory/serializableMappingCache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,wBAAwB;uBAChB,MAAM,qBAAqB,eAAe,GAAG,IAAI;cAG1D,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe;CAGrD,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts deleted file mode 100644 index 9ba11b94..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { SerializableRef } from './types'; -/** - * This symbol is used to represent a mapping from the value to itself. - * - * It's used to prevent converting a serializable that's already converted - for - * example a Shared Value that's in worklet's closure. - */ -export declare const serializableMappingFlag: unique symbol; -export declare const serializableMappingCache: { - set(serializable: object, serializableRef?: SerializableRef): void; - get: (key: object) => symbol | SerializableRef | undefined; -}; -//# sourceMappingURL=serializableMappingCache.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts.map deleted file mode 100644 index a5b009dc..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/serializableMappingCache.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"serializableMappingCache.native.d.ts","sourceRoot":"","sources":["../../../src/memory/serializableMappingCache.native.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,eAA8B,CAAC;AAenE,eAAO,MAAM,wBAAwB;sBACjB,MAAM,oBAAoB,eAAe,GAAG,IAAI;;CAInE,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts deleted file mode 100644 index 840333e8..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Synchronizable } from './types'; -export declare function createSynchronizable(_value: TValue): Synchronizable; -//# sourceMappingURL=synchronizable.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts.map deleted file mode 100644 index 56581c4a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"synchronizable.d.ts","sourceRoot":"","sources":["../../../src/memory/synchronizable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,oBAAoB,CAAC,MAAM,GAAG,OAAO,EACnD,MAAM,EAAE,MAAM,GACb,cAAc,CAAC,MAAM,CAAC,CAExB"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts deleted file mode 100644 index 6b5ca299..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Synchronizable } from './types'; -export declare function createSynchronizable(initialValue: TValue): Synchronizable; -//# sourceMappingURL=synchronizable.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts.map deleted file mode 100644 index 3b5ea8ce..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizable.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"synchronizable.native.d.ts","sourceRoot":"","sources":["../../../src/memory/synchronizable.native.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,oBAAoB,CAAC,MAAM,GAAG,OAAO,EACnD,YAAY,EAAE,MAAM,GACnB,cAAc,CAAC,MAAM,CAAC,CAQxB"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts deleted file mode 100644 index b42d5da9..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type Synchronizable, type SynchronizableRef } from './types'; -export declare function __installUnpacker(): void; -export type SynchronizableUnpacker = (synchronizableRef: SynchronizableRef) => Synchronizable; -//# sourceMappingURL=synchronizableUnpacker.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts.map deleted file mode 100644 index b9bfd72e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/synchronizableUnpacker.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"synchronizableUnpacker.native.d.ts","sourceRoot":"","sources":["../../../src/memory/synchronizableUnpacker.native.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtE,wBAAgB,iBAAiB,SAyDhC;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAC1C,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,CAAC,KACzC,cAAc,CAAC,MAAM,CAAC,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts deleted file mode 100644 index 2ddfff3b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * The below type is used for HostObjects returned by the JSI API that don't - * have any accessible fields or methods but can carry data that is accessed - * from the c++ side. We add a field to the type to make it possible for - * typescript to recognize which JSI methods accept those types as arguments and - * to be able to correctly type check other methods that may use them. However, - * this field is not actually defined nor should be used for anything else as - * assigning any data to those objects will throw an error. - */ -export type SerializableRef = { - __serializableRef: true; - __nativeStateSerializableJSRef: TValue; -}; -export type FlatSerializableRef = TValue extends SerializableRef ? SerializableRef : SerializableRef; -export type SynchronizableRef = { - __synchronizableRef: true; - __nativeStateSynchronizableJSRef: TValue; -}; -export type Synchronizable = SerializableRef & SynchronizableRef & { - __synchronizableRef: true; - getDirty(): TValue; - getBlocking(): TValue; - setBlocking(value: TValue | ((prev: TValue) => TValue)): void; - lock(): void; - unlock(): void; -}; -/** - * Registration data for - * [registerCustomSerializable](https://docs.swmansion.com/react-native-reanimated/docs/memory/registerCustomSerializable) - * function. - */ -export type RegistrationData = { - /** - * A unique name for the Custom Serializable. It's used to prevent duplicate - * registrations of the same Custom Serializable. You will get warned if you - * attempt to register a Custom Serializable with a name that has already been - * used. - */ - name: string; - /** - * A worklet that checks whether a given JavaScript value is of the type - * handled by this Custom Serializable. - */ - determine: (value: object) => value is TValue; - /** - * A worklet that packs the JavaScript value of type `TValue` into a value - * that can be serialized by default as Serializable. The function must return - * a [supported type for - * Serialization](https://docs.swmansion.com/react-native-reanimated/docs/memory/Serializable#supported-types). - */ - pack: (value: TValue) => TPacked; - /** - * A worklet that unpacks the packed value, after it's been deserialized from - * it's packed form, back into the JavaScript value of type `TValue`. - */ - unpack: (value: TPacked) => TValue; -}; -export type SerializationData = Omit, 'name'> & { - /** Only defined on the RN Runtime. */ - name?: string; -}; -export type CustomSerializationRegistry = SerializationData[]; -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts.map deleted file mode 100644 index e5e70550..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/memory/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,CAAC,MAAM,GAAG,OAAO,IAAI;IAC9C,iBAAiB,EAAE,IAAI,CAAC;IACxB,8BAA8B,EAAE,MAAM,CAAC;CACxC,CAAC;AAIF,MAAM,MAAM,mBAAmB,CAAC,MAAM,IACpC,MAAM,SAAS,eAAe,CAAC,MAAM,UAAU,CAAC,GAC5C,eAAe,CAAC,UAAU,CAAC,GAC3B,eAAe,CAAC,MAAM,CAAC,CAAC;AAE9B,MAAM,MAAM,iBAAiB,CAAC,MAAM,GAAG,OAAO,IAAI;IAChD,mBAAmB,EAAE,IAAI,CAAC;IAC1B,gCAAgC,EAAE,MAAM,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,MAAM,GAAG,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,GACpE,iBAAiB,CAAC,MAAM,CAAC,GAAG;IAC1B,mBAAmB,EAAE,IAAI,CAAC;IAC1B,QAAQ,IAAI,MAAM,CAAC;IACnB,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9D,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;CAChB,CAAC;AAEJ;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,GAAG,OAAO,IAAI;IACvE;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;IAC9C;;;;;OAKG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,GAAG,OAAO,IAAI,IAAI,CAC5E,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,CACP,GAAG;IACF,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts deleted file mode 100644 index 2b952616..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare global { - var evalWithSourceMap: ((js: string, sourceURL: string, sourceMap: string) => () => unknown) | undefined; - var evalWithSourceUrl: ((js: string, sourceURL: string) => () => unknown) | undefined; -} -export {}; -//# sourceMappingURL=valueUnpacker.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts.map deleted file mode 100644 index 91146715..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/memory/valueUnpacker.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"valueUnpacker.native.d.ts","sourceRoot":"","sources":["../../../src/memory/valueUnpacker.native.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,iBAAiB,EACjB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,OAAO,CAAC,GACrE,SAAS,CAAC;IACd,IAAI,iBAAiB,EACjB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,OAAO,CAAC,GAClD,SAAS,CAAC;CACf"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts deleted file mode 100644 index 9ff4e2fe..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=mock.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts.map deleted file mode 100644 index 3e18c8ed..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/mock.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/mock.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts deleted file mode 100644 index 0ca7e07e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare const IS_JEST: boolean; -export declare const IS_WEB: boolean; -export declare const IS_WINDOWS: boolean; -export declare const SHOULD_BE_USE_WEB: boolean; -//# sourceMappingURL=platformChecker.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts.map deleted file mode 100644 index 61f9b054..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"platformChecker.d.ts","sourceRoot":"","sources":["../../src/platformChecker.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,EAAE,OAAsC,CAAC;AAC7D,eAAO,MAAM,MAAM,EAAE,OAA+B,CAAC;AACrD,eAAO,MAAM,UAAU,EAAE,OAAmC,CAAC;AAC7D,eAAO,MAAM,iBAAiB,EAAE,OAAyC,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts deleted file mode 100644 index 4715199f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const IS_JEST = false; -//# sourceMappingURL=platformChecker.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts.map deleted file mode 100644 index 402f912c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/platformChecker.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"platformChecker.native.d.ts","sourceRoot":"","sources":["../../src/platformChecker.native.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAAQ,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts index 61822537..698e851a 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts @@ -1,6 +1,77 @@ -import type { WorkletFunction, WorkletRuntime, WorkletRuntimeConfig } from './types'; +import type { WorkletFunction, WorkletRuntime } from './workletTypes'; +/** + * Lets you create a new JS runtime which can be used to run worklets possibly + * on different threads than JS or UI thread. + * + * @param config - Runtime configuration object - {@link WorkletRuntimeConfig}. + * @returns WorkletRuntime which is a + * `jsi::HostObject` - {@link WorkletRuntime} + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ + */ export declare function createWorkletRuntime(config?: WorkletRuntimeConfig): WorkletRuntime; +/** + * @deprecated Please use the new config object signature instead: + * `createWorkletRuntime({ name, initializer })` + * + * Lets you create a new JS runtime which can be used to run worklets possibly + * on different threads than JS or UI thread. + * @param name - A name used to identify the runtime which will appear in + * devices list in Chrome DevTools. + * @param initializer - An optional worklet that will be run synchronously on + * the same thread immediately after the runtime is created. + * @returns WorkletRuntime which is a + * `jsi::HostObject` - {@link WorkletRuntime} + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ + */ export declare function createWorkletRuntime(name?: string, initializer?: () => void): WorkletRuntime; export declare function runOnRuntime(workletRuntime: WorkletRuntime, worklet: (...args: Args) => ReturnValue): WorkletFunction; -export declare function scheduleOnRuntime(workletRuntime: WorkletRuntime, worklet: (...args: Args) => ReturnValue, ...args: Args): void; +/** Configuration object for creating a worklet runtime. */ +export type WorkletRuntimeConfig = { + /** The name of the worklet runtime. */ + name?: string; + /** + * A worklet that will be run immediately after the runtime is created and + * before any other worklets. + */ + initializer?: () => void; + /** + * Time interval in milliseconds between polling of frame callbacks scheduled + * by requestAnimationFrame. If not specified, it defaults to 16 ms. + */ + animationQueuePollingRate?: number; + /** + * Determines whether to enable the default Event Loop or not. The Event Loop + * provides implementations for `setTimeout`, `setImmediate`, `setInterval`, + * `requestAnimationFrame`, `queueMicrotask`, `clearTimeout`, `clearInterval`, + * `clearImmediate`, and `cancelAnimationFrame` methods. If not specified, it + * defaults to `true`. + */ + enableEventLoop?: true; +} & ({ + /** + * If true, the runtime will use the default queue implementation for + * scheduling worklets. Defaults to true. + */ + useDefaultQueue?: true; + /** + * An optional custom queue to be used for scheduling worklets. + * + * The queue has to implement the C++ `AsyncQueue` interface from + * ``. + */ + customQueue?: never; +} | { + /** + * If true, the runtime will use the default queue implementation for + * scheduling worklets. Defaults to true. + */ + useDefaultQueue: false; + /** + * An optional custom queue to be used for scheduling worklets. + * + * The queue has to implement the C++ `AsyncQueue` interface from + * ``. + */ + customQueue?: object; +}); //# sourceMappingURL=runtimes.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts.map index 21979a42..e546d5db 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"runtimes.d.ts","sourceRoot":"","sources":["../../src/runtimes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,oBAAoB,GAC5B,cAAc,CAAC;AAElB,wBAAgB,oBAAoB,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,cAAc,CAAC;AAMlB,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,GACtC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAMtC,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EACnE,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EACvC,GAAG,IAAI,EAAE,IAAI,GACZ,IAAI,CAAC"} \ No newline at end of file +{"version":3,"file":"runtimes.d.ts","sourceRoot":"","sources":["../../src/runtimes.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE;;;;;;;;GAQG;AAEH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,oBAAoB,GAC5B,cAAc,CAAC;AAElB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,cAAc,CAAC;AAsDlB,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,GACtC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAiCtC,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;;OAGG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,IAAI,CAAC;CACxB,GAAG,CACA;IACE;;;OAGG;IACH,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,GACD;IACE;;;OAGG;IACH,eAAe,EAAE,KAAK,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CACJ,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts deleted file mode 100644 index 9d0f909f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { WorkletFunction, WorkletRuntime, WorkletRuntimeConfig } from './types'; -/** - * Lets you create a new JS runtime which can be used to run worklets possibly - * on different threads than JS or UI thread. - * - * @param config - Runtime configuration object - {@link WorkletRuntimeConfig}. - * @returns WorkletRuntime which is a - * `jsi::HostObject` - {@link WorkletRuntime} - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ - */ -export declare function createWorkletRuntime(config?: WorkletRuntimeConfig): WorkletRuntime; -/** - * @deprecated Please use the new config object signature instead: - * `createWorkletRuntime({ name, initializer })` - * - * Lets you create a new JS runtime which can be used to run worklets possibly - * on different threads than JS or UI thread. - * @param name - A name used to identify the runtime which will appear in - * devices list in Chrome DevTools. - * @param initializer - An optional worklet that will be run synchronously on - * the same thread immediately after the runtime is created. - * @returns WorkletRuntime which is a - * `jsi::HostObject` - {@link WorkletRuntime} - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ - */ -export declare function createWorkletRuntime(name?: string, initializer?: () => void): WorkletRuntime; -/** - * Lets you asynchronously run a - * [worklet](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worklet) - * on a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime). - * - * Check - * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} - * for more information about the different runtime kinds. - * - * - The worklet is scheduled on the Worker Runtime's [Async - * Queue](https://github.com/software-mansion/react-native-reanimated/blob/main/packages/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h) - * - The function cannot be scheduled on the Worker Runtime from [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * or another [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime), - * unless the [Bundle - * Mode](https://docs.swmansion.com/react-native-worklets/docs/experimental/bundleMode) - * is enabled. - * - * @param workletRuntime - The runtime to schedule the worklet on. - * @param worklet - The worklet to schedule. - * @param args - The arguments to pass to the worklet. - * @returns The return value of the worklet. - */ -export declare function scheduleOnRuntime(workletRuntime: WorkletRuntime, worklet: (...args: Args) => ReturnValue, ...args: Args): void; -/** - * @deprecated Use `scheduleOnRuntime` instead. - * - * Schedule a worklet to execute on the background queue. - */ -export declare function runOnRuntime(workletRuntime: WorkletRuntime, worklet: (...args: Args) => ReturnValue): WorkletFunction; -//# sourceMappingURL=runtimes.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts.map deleted file mode 100644 index ecadafab..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/runtimes.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"runtimes.native.d.ts","sourceRoot":"","sources":["../../src/runtimes.native.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAIjB;;;;;;;;GAQG;AAEH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,oBAAoB,GAC5B,cAAc,CAAC;AAElB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,cAAc,CAAC;AAqDlB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EACnE,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EACvC,GAAG,IAAI,EAAE,IAAI,GACZ,IAAI,CAAC;AAiCR;;;;GAIG;AAGH,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,GACtC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts index 0735db80..f8694f19 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts @@ -1,4 +1,4 @@ -import { type TurboModule } from 'react-native'; +import type { TurboModule } from 'react-native'; export interface Spec extends TurboModule { installTurboModule: () => boolean; } diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts.map index fd3abe92..fc3f81bc 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/NativeWorkletsModule.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"NativeWorkletsModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeWorkletsModule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,kBAAkB,EAAE,MAAM,OAAO,CAAC;CACnC;;AAED,wBAA+D"} \ No newline at end of file +{"version":3,"file":"NativeWorkletsModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeWorkletsModule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,kBAAkB,EAAE,MAAM,OAAO,CAAC;CACnC;;AAED,wBAA+D"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts index 25e87065..67b63f19 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts @@ -1,3 +1,3 @@ import type { Spec } from './NativeWorkletsModule'; -export declare const WorkletsTurboModule: Spec | null | undefined; +export declare const WorkletsTurboModule: Spec | null; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts.map index 606d705e..1cd7bb79 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/specs/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/specs/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAGnD,eAAO,MAAM,mBAAmB,EAAE,IAAI,GAAG,IAAI,GAAG,SAMtC,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/specs/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAGnD,eAAO,MAAM,mBAAmB,EAAE,IAAI,GAAG,IAM/B,CAAC"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts index 8b95dcef..6860be6d 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts @@ -1,10 +1,138 @@ -export declare function callMicrotasks(): void; +import type { WorkletFunction } from './workletTypes'; +export declare function setupMicrotasks(): void; +export declare const callMicrotasks: () => void; +/** + * Lets you schedule a function to be executed on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * + * - The callback executes asynchronously and doesn't return a value. + * - Passed function and args are automatically + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * and serialized. + * - This function cannot be called from the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime) + * or [Worker + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worker-worklet-runtime---worker-runtime), + * unless you have the [Bundle Mode](/docs/experimental/bundleMode) enabled. + * + * @param fun - A reference to a function you want to schedule on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * @param args - Arguments to pass to the function. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnUI + */ export declare function scheduleOnUI(worklet: (...args: Args) => ReturnValue, ...args: Args): void; +/** + * Lets you asynchronously run + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). + * + * This method does not schedule the work immediately but instead waits for + * other worklets to be scheduled within the same JS loop. It uses + * queueMicrotask to schedule all the worklets at once making sure they will run + * within the same frame boundaries on the UI thread. + * + * @param fun - A reference to a function you want to execute on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/) + * from the [JavaScript + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). + * @returns A function that accepts arguments for the function passed as the + * first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI @deprecated Use `scheduleOnUI` instead. + */ export declare function runOnUI(worklet: (...args: Args) => ReturnValue): (...args: Args) => void; +/** + * Lets you run a function synchronously on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime) + * from the [RN + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#react-native-runtime-rn-runtime). + * Passed function and args are automatically + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * and serialized. + * + * - This function cannot be called from the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * - This function cannot be called from a [Worker + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worker-worklet-runtime---worker-runtime). + * + * @param fun - A reference to a function you want to execute on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * @param args - Arguments to pass to the function. + * @returns The return value of the function passed as the first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUISync + */ export declare function runOnUISync(worklet: (...args: Args) => ReturnValue, ...args: Args): ReturnValue; export declare function executeOnUIRuntimeSync(worklet: (...args: Args) => ReturnValue): (...args: Args) => ReturnValue; -export declare function runOnJS(fun: (...args: Args) => ReturnValue): (...args: Args) => void; -export declare function scheduleOnRN(fun: (...args: Args) => ReturnValue, ...args: Args): void; -export declare function runOnUIAsync(worklet: (...args: Args) => ReturnValue, ...args: Args): Promise; -export declare function unstable_eventLoopTask(): never; +type ReleaseRemoteFunction = { + (...args: Args): ReturnValue; +}; +type DevRemoteFunction = { + __remoteFunction: (...args: Args) => ReturnValue; +}; +type RemoteFunction = ReleaseRemoteFunction | DevRemoteFunction; +/** + * Lets you asynchronously run + * non-[workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions that couldn't otherwise run on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-thread). + * This applies to most external libraries as they don't have their functions + * marked with "worklet"; directive. + * + * @param fun - A reference to a function you want to execute on the JavaScript + * thread from the UI thread. + * @returns A function that accepts arguments for the function passed as the + * first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnJS + */ +/** @deprecated Use `scheduleOnRN` instead. */ +export declare function runOnJS(fun: ((...args: Args) => ReturnValue) | RemoteFunction | WorkletFunction): (...args: Args) => void; +/** + * Lets you schedule a function to be executed on the RN runtime from any + * runtime. Check + * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} + * for more information about the different runtime kinds. + * + * Scheduling function from the RN Runtime (we are already on RN Runtime) simply + * uses `queueMicrotask`. + * + * When functions need to be scheduled from the UI Runtime, first function and + * args are serialized and then the system passes the scheduling responsibility + * to the JSScheduler. The JSScheduler then uses the RN CallInvoker to schedule + * the function asynchronously on the JavaScript thread by calling + * `jsCallInvoker_->invokeAsync()`. + * + * When called from a Worker Runtime, it uses the same JSScheduler mechanism. + * + * @param fun - A function you want to schedule on the RN runtime. A function + * can be a worklet, a remote function or a regular function. + * @param args - Arguments to pass to the function. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnRN + */ +export declare function scheduleOnRN(fun: ((...args: Args) => ReturnValue) | RemoteFunction | WorkletFunction, ...args: Args): void; +/** + * Lets you asynchronously run + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * + * This method does not schedule the work immediately but instead waits for + * other worklets to be scheduled within the same JS loop. It uses + * queueMicrotask to schedule all the worklets at once making sure they will run + * within the same frame boundaries on the UI thread. + * + * @param fun - A reference to a function you want to execute on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * from the [JavaScript + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#javascript-runtime). + * @returns A promise that resolves to the return value of the function passed + * as the first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUIAsync + */ +export declare function runOnUIAsync(worklet: (...args: Args) => ReturnValue): (...args: Args) => Promise; +/** + * Added temporarily for integration with `react-native-audio-api`. Don't depend + * on this API as it may change without notice. + */ +export declare function unstable_eventLoopTask(worklet: (...args: TArgs) => TRet): (...args: TArgs) => void; +export {}; //# sourceMappingURL=threads.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts.map index a7f8e0ca..5f65422d 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/threads.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EACvC,GAAG,IAAI,EAAE,IAAI,GACZ,IAAI,CAEN;AAED,wBAAgB,OAAO,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EACzD,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,GACtC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAIzB;AAED,wBAAgB,WAAW,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC7D,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EACvC,GAAG,IAAI,EAAE,IAAI,GACZ,WAAW,CAAC;AAMf,wBAAgB,sBAAsB,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EACxE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,GACtC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC;AAMlC,wBAAgB,OAAO,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EACzD,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,GAClC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAEzB;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EACnC,GAAG,IAAI,EAAE,IAAI,GACZ,IAAI,CAMN;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,WAAW,EAC9D,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,EACvC,GAAG,IAAI,EAAE,IAAI,GACZ,OAAO,CAAC,WAAW,CAAC,CAItB;AAsCD,wBAAgB,sBAAsB,IAAI,KAAK,CAE9C"} \ No newline at end of file +{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/threads.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts deleted file mode 100644 index c9420fed..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts +++ /dev/null @@ -1,139 +0,0 @@ -import type { WorkletFunction } from './types'; -export declare function setupMicrotasks(): void; -declare function callMicrotasksOnUIThread(): void; -export declare const callMicrotasks: typeof callMicrotasksOnUIThread; -/** - * Lets you schedule a function to be executed on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - * - The callback executes asynchronously and doesn't return a value. - * - Passed function and args are automatically - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * and serialized. - * - This function cannot be called from the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * or a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime), - * unless you have the [Bundle Mode](/docs/experimental/bundleMode) enabled. - * - * @param fun - A reference to a function you want to schedule on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * @param args - Arguments to pass to the function. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnUI - */ -export declare function scheduleOnUI(worklet: (...args: Args) => ReturnValue, ...args: Args): void; -/** - * Lets you asynchronously run - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). - * - * This method does not schedule the work immediately but instead waits for - * other worklets to be scheduled within the same JS loop. It uses - * queueMicrotask to schedule all the worklets at once making sure they will run - * within the same frame boundaries on the UI thread. - * - * @param fun - A reference to a function you want to execute on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/) - * from the [JavaScript - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). - * @returns A function that accepts arguments for the function passed as the - * first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI @deprecated Use `scheduleOnUI` instead. - */ -export declare function runOnUI(worklet: (...args: Args) => ReturnValue): (...args: Args) => void; -/** - * Lets you run a function synchronously on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * from the [RN - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#rn-runtime). - * Passed function and args are automatically - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * and serialized. - * - * - This function cannot be called from the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - This function cannot be called from a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime). - * - * @param fun - A reference to a function you want to execute on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * @param args - Arguments to pass to the function. - * @returns The return value of the function passed as the first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUISync - */ -export declare function runOnUISync(worklet: (...args: Args) => ReturnValue, ...args: Args): ReturnValue; -export declare function executeOnUIRuntimeSync(worklet: (...args: Args) => ReturnValue): (...args: Args) => ReturnValue; -type ReleaseRemoteFunction = { - (...args: Args): ReturnValue; -}; -type DevRemoteFunction = { - __remoteFunction: (...args: Args) => ReturnValue; -}; -type RemoteFunction = ReleaseRemoteFunction | DevRemoteFunction; -/** - * Lets you schedule a function to be executed on the RN runtime from any - * runtime. Check - * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} - * for more information about the different runtime kinds. - * - * Scheduling function from the RN Runtime (we are already on RN Runtime) simply - * uses `queueMicrotask`. - * - * When functions need to be scheduled from the UI Runtime, first function and - * args are serialized and then the system passes the scheduling responsibility - * to the JSScheduler. The JSScheduler then uses the RN CallInvoker to schedule - * the function asynchronously on the JavaScript thread by calling - * `jsCallInvoker_->invokeAsync()`. - * - * When called from a Worker Runtime, it uses the same JSScheduler mechanism. - * - * @param fun - A function you want to schedule on the RN runtime. A function - * can be a worklet, a remote function or a regular function. - * @param args - Arguments to pass to the function. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnRN - */ -export declare function scheduleOnRN(fun: ((...args: Args) => ReturnValue) | RemoteFunction | WorkletFunction, ...args: Args): void; -/** - * Lets you asynchronously run - * non-[workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions that couldn't otherwise run on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-thread). - * This applies to most external libraries as they don't have their functions - * marked with "worklet"; directive. - * - * @param fun - A reference to a function you want to execute on the JavaScript - * thread from the UI thread. - * @returns A function that accepts arguments for the function passed as the - * first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnJS - */ -/** @deprecated Use `scheduleOnRN` instead. */ -export declare function runOnJS(fun: ((...args: Args) => ReturnValue) | RemoteFunction | WorkletFunction): (...args: Args) => void; -/** - * Lets you asynchronously run - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - * This method does not schedule the work immediately but instead waits for - * other worklets to be scheduled within the same JS loop. It uses - * queueMicrotask to schedule all the worklets at once making sure they will run - * within the same frame boundaries on the UI thread. - * - * @param fun - A reference to a function you want to execute on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * from the [JavaScript - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#javascript-runtime). - * @returns A promise that resolves to the return value of the function passed - * as the first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUIAsync - */ -export declare function runOnUIAsync(worklet: (...args: Args) => ReturnValue, ...args: Args): Promise; -/** - * Added temporarily for integration with `react-native-audio-api`. Don't depend - * on this API as it may change without notice. - */ -export declare function unstable_eventLoopTask(worklet: (...args: TArgs) => TRet): (...args: TArgs) => void; -export {}; -//# sourceMappingURL=threads.native.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts.map deleted file mode 100644 index 684fd732..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/threads.native.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"threads.native.d.ts","sourceRoot":"","sources":["../../src/threads.native.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts deleted file mode 100644 index 2b42a86b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type { RuntimeKind } from './runtimeKind'; -/** Public globals to be exposed to the user. */ -declare global { - /** - * @deprecated Use {@link __RUNTIME_KIND} instead. - * - * This global variable is a diagnostic/development tool. - * - * It's `true` on Worklet Runtimes and `false` on React Native Runtime. - */ - var _WORKLET: boolean | undefined; - /** - * This ArrayBuffer contains the memory address of `jsi::Runtime` which is the - * Reanimated UI runtime. - */ - var _WORKLET_RUNTIME: ArrayBuffer; - /** @deprecated Don't use. */ - var _IS_FABRIC: boolean | undefined; - /** - * This global variable is used to determine the kind of the current runtime. - * You can use it directly to differentiate between runtimes. However, the - * recommended way for differentiating is to use the {@link getRuntimeKind} - * function. - * - * - Value _1_: React Native Runtime - * - Value _2_: UI Worklet Runtime - * - Value _3_: Worker Worklet Runtime - */ - var __RUNTIME_KIND: RuntimeKind | 1 | 2 | 3; -} -export type WorkletRuntime = { - __hostObjectWorkletRuntime: never; - readonly name: string; -}; -export type WorkletStackDetails = [ - error: Error, - lineOffset: number, - columnOffset: number -]; -export type WorkletClosure = Record; -interface WorkletInitData { - code: string; - /** Only in dev builds. */ - location?: string; - /** Only in dev builds. */ - sourceMap?: string; -} -interface WorkletProps { - __closure: WorkletClosure; - __workletHash: number; - /** Only in Legacy Bundling. */ - __initData?: WorkletInitData; - /** Only for Handles. */ - __init?: () => unknown; - /** `__stackDetails` is removed after parsing. */ - __stackDetails?: WorkletStackDetails; - /** Only in dev builds. */ - __pluginVersion?: string; -} -export type WorkletFunction = ((...args: TArgs) => TReturn) & WorkletProps; -export interface WorkletFactory = Record> { - (closureVariables: TClosureVariables): WorkletFunction; -} -export type ValueUnpacker = WorkletFunction<[ - objectToUnpack: unknown, - category?: string -], unknown>; -export interface WorkletImport { - __bundleData: { - /** Name of the module which is the source of the import. */ - source: string; - /** The name of the imported value. */ - imported: string; - }; -} -/** Configuration object for creating a worklet runtime. */ -export type WorkletRuntimeConfig = { - /** The name of the worklet runtime. */ - name?: string; - /** - * A worklet that will be run immediately after the runtime is created and - * before any other worklets. - */ - initializer?: () => void; - /** - * Time interval in milliseconds between polling of frame callbacks scheduled - * by requestAnimationFrame. If not specified, it defaults to 16 ms. - */ - animationQueuePollingRate?: number; - /** - * Determines whether to enable the default Event Loop or not. The Event Loop - * provides implementations for `setTimeout`, `setImmediate`, `setInterval`, - * `requestAnimationFrame`, `queueMicrotask`, `clearTimeout`, `clearInterval`, - * `clearImmediate`, and `cancelAnimationFrame` methods. If not specified, it - * defaults to `true`. - */ - enableEventLoop?: true; -} & ({ - /** - * If true, the runtime will use the default queue implementation for - * scheduling worklets. Defaults to true. - */ - useDefaultQueue?: true; - /** - * An optional custom queue to be used for scheduling worklets. - * - * The queue has to implement the C++ `AsyncQueue` interface from - * ``. - */ - customQueue?: never; -} | { - /** - * If true, the runtime will use the default queue implementation for - * scheduling worklets. Defaults to true. - */ - useDefaultQueue: false; - /** - * An optional custom queue to be used for scheduling worklets. - * - * The queue has to implement the C++ `AsyncQueue` interface from - * ``. - */ - customQueue?: object; -}); -export {}; -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts.map deleted file mode 100644 index 7263f683..00000000 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts b/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts index c39f0c5d..52cff1bf 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts @@ -1,8 +1,9 @@ -import type { WorkletFunction } from './types'; +import type { WorkletFunction } from './workletTypes'; /** * This function allows you to determine if a given function is a worklet. It - * only works with Worklets Babel plugin enabled. Unless you are doing something - * with internals of Worklets you shouldn't need to use this function. + * only works with Reanimated Babel plugin enabled. Unless you are doing + * something with internals of Reanimated you shouldn't need to use this + * function. * * ### Note * diff --git a/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts.map b/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts.map index 36b82acf..197ed923 100644 --- a/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts.map +++ b/frontend-admin/node_modules/react-native-worklets/lib/typescript/workletFunction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"workletFunction.d.ts","sourceRoot":"","sources":["../../src/workletFunction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EAClC,WAAW,GAAG,OAAO,EACrB,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAU7D"} \ No newline at end of file +{"version":3,"file":"workletFunction.d.ts","sourceRoot":"","sources":["../../src/workletFunction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EAClC,WAAW,GAAG,OAAO,EACrB,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAU7D"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/LICENSE b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/LICENSE deleted file mode 100644 index f31575ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/README.md b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/README.md deleted file mode 100644 index 7000ec5b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# @babel/plugin-transform-class-properties - -> This plugin transforms static class properties as well as properties declared with the property initializer syntax - -See our website [@babel/plugin-transform-class-properties](https://babeljs.io/docs/babel-plugin-transform-class-properties) for more information. - -## Install - -Using npm: - -```sh -npm install --save-dev @babel/plugin-transform-class-properties -``` - -or using yarn: - -```sh -yarn add @babel/plugin-transform-class-properties --dev -``` diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js deleted file mode 100644 index c542e543..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -var _helperPluginUtils = require("@babel/helper-plugin-utils"); -var _helperCreateClassFeaturesPlugin = require("@babel/helper-create-class-features-plugin"); -var _default = exports.default = (0, _helperPluginUtils.declare)((api, options) => { - api.assertVersion(7); - return (0, _helperCreateClassFeaturesPlugin.createClassFeaturePlugin)({ - name: "transform-class-properties", - api, - feature: _helperCreateClassFeaturesPlugin.FEATURES.fields, - loose: options.loose, - manipulateOptions(opts, parserOpts) { - { - parserOpts.plugins.push("classProperties", "classPrivateProperties"); - } - } - }); -}); - -//# sourceMappingURL=index.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js.map deleted file mode 100644 index 18e0ac5b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_helperPluginUtils","require","_helperCreateClassFeaturesPlugin","_default","exports","default","declare","api","options","assertVersion","createClassFeaturePlugin","name","feature","FEATURES","fields","loose","manipulateOptions","opts","parserOpts","plugins","push"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint-disable @babel/development/plugin-name */\n\nimport { declare } from \"@babel/helper-plugin-utils\";\nimport {\n createClassFeaturePlugin,\n FEATURES,\n} from \"@babel/helper-create-class-features-plugin\";\n\nexport interface Options {\n loose?: boolean;\n}\n\nexport default declare((api, options: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n\n return createClassFeaturePlugin({\n name: \"transform-class-properties\",\n\n api,\n feature: FEATURES.fields,\n loose: options.loose,\n\n manipulateOptions(opts, parserOpts) {\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) These plugins have been removed\n parserOpts.plugins.push(\"classProperties\", \"classPrivateProperties\");\n }\n },\n });\n});\n"],"mappings":";;;;;;AAEA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,gCAAA,GAAAD,OAAA;AAGoD,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAMrC,IAAAC,0BAAO,EAAC,CAACC,GAAG,EAAEC,OAAgB,KAAK;EAChDD,GAAG,CAACE,aAAa,CAAkB,CAAE,CAAC;EAEtC,OAAO,IAAAC,yDAAwB,EAAC;IAC9BC,IAAI,EAAE,4BAA4B;IAElCJ,GAAG;IACHK,OAAO,EAAEC,yCAAQ,CAACC,MAAM;IACxBC,KAAK,EAAEP,OAAO,CAACO,KAAK;IAEpBC,iBAAiBA,CAACC,IAAI,EAAEC,UAAU,EAAE;MACC;QAEjCA,UAAU,CAACC,OAAO,CAACC,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;MACtE;IACF;EACF,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/package.json b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/package.json deleted file mode 100644 index 40139773..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@babel/plugin-transform-class-properties", - "version": "7.27.1", - "description": "This plugin transforms static class properties as well as properties declared with the property initializer syntax", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel.git", - "directory": "packages/babel-plugin-transform-class-properties" - }, - "homepage": "https://babel.dev/docs/en/next/babel-plugin-transform-class-properties", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "./lib/index.js", - "keywords": [ - "babel-plugin" - ], - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "devDependencies": { - "@babel/core": "^7.27.1", - "@babel/helper-plugin-test-runner": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "author": "The Babel Team (https://babel.dev/team)", - "type": "commonjs" -} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/LICENSE b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/LICENSE deleted file mode 100644 index f31575ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/README.md b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/README.md deleted file mode 100644 index b552b0d7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# @babel/plugin-transform-classes - -> Compile ES2015 classes to ES5 - -See our website [@babel/plugin-transform-classes](https://babeljs.io/docs/babel-plugin-transform-classes) for more information. - -## Install - -Using npm: - -```sh -npm install --save-dev @babel/plugin-transform-classes -``` - -or using yarn: - -```sh -yarn add @babel/plugin-transform-classes --dev -``` diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js deleted file mode 100644 index dc193fa3..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -var _helperPluginUtils = require("@babel/helper-plugin-utils"); -var _helperCompilationTargets = require("@babel/helper-compilation-targets"); -var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure"); -var _core = require("@babel/core"); -var _transformClass = require("./transformClass.js"); -const globalsBrowserUpper = require("@babel/helper-globals/data/browser-upper.json"), - globalsBuiltinUpper = require("@babel/helper-globals/data/builtin-upper.json"); -const builtinClasses = new Set([...globalsBrowserUpper, ...globalsBuiltinUpper]); -builtinClasses.delete("Iterator"); -var _default = exports.default = (0, _helperPluginUtils.declare)((api, options) => { - var _api$assumption, _api$assumption2, _api$assumption3, _api$assumption4; - api.assertVersion(7); - const { - loose = false - } = options; - const setClassMethods = (_api$assumption = api.assumption("setClassMethods")) != null ? _api$assumption : loose; - const constantSuper = (_api$assumption2 = api.assumption("constantSuper")) != null ? _api$assumption2 : loose; - const superIsCallableConstructor = (_api$assumption3 = api.assumption("superIsCallableConstructor")) != null ? _api$assumption3 : loose; - const noClassCalls = (_api$assumption4 = api.assumption("noClassCalls")) != null ? _api$assumption4 : loose; - const supportUnicodeId = !(0, _helperCompilationTargets.isRequired)("transform-unicode-escapes", api.targets()); - const VISITED = new WeakSet(); - return { - name: "transform-classes", - visitor: { - ExportDefaultDeclaration(path) { - if (!path.get("declaration").isClassDeclaration()) return; - { - var _path$splitExportDecl; - (_path$splitExportDecl = path.splitExportDeclaration) != null ? _path$splitExportDecl : path.splitExportDeclaration = require("@babel/traverse").NodePath.prototype.splitExportDeclaration; - } - path.splitExportDeclaration(); - }, - ClassDeclaration(path) { - const { - node - } = path; - const ref = node.id ? _core.types.cloneNode(node.id) : path.scope.generateUidIdentifier("class"); - path.replaceWith(_core.types.variableDeclaration("let", [_core.types.variableDeclarator(ref, _core.types.toExpression(node))])); - }, - ClassExpression(path, state) { - const { - node - } = path; - if (VISITED.has(node)) return; - { - var _path$ensureFunctionN; - (_path$ensureFunctionN = path.ensureFunctionName) != null ? _path$ensureFunctionN : path.ensureFunctionName = require("@babel/traverse").NodePath.prototype.ensureFunctionName; - } - const replacement = path.ensureFunctionName(supportUnicodeId); - if (replacement && replacement.node !== node) return; - VISITED.add(node); - const [replacedPath] = path.replaceWith((0, _transformClass.default)(path, state.file, builtinClasses, loose, { - setClassMethods, - constantSuper, - superIsCallableConstructor, - noClassCalls - }, supportUnicodeId)); - if (replacedPath.isCallExpression()) { - (0, _helperAnnotateAsPure.default)(replacedPath); - const callee = replacedPath.get("callee"); - if (callee.isArrowFunctionExpression()) { - callee.arrowFunctionToExpression(); - } - } - } - } - }; -}); - -//# sourceMappingURL=index.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js.map deleted file mode 100644 index bf8355ca..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_helperPluginUtils","require","_helperCompilationTargets","_helperAnnotateAsPure","_core","_transformClass","globalsBrowserUpper","globalsBuiltinUpper","builtinClasses","Set","delete","_default","exports","default","declare","api","options","_api$assumption","_api$assumption2","_api$assumption3","_api$assumption4","assertVersion","loose","setClassMethods","assumption","constantSuper","superIsCallableConstructor","noClassCalls","supportUnicodeId","isRequired","targets","VISITED","WeakSet","name","visitor","ExportDefaultDeclaration","path","get","isClassDeclaration","_path$splitExportDecl","splitExportDeclaration","NodePath","prototype","ClassDeclaration","node","ref","id","t","cloneNode","scope","generateUidIdentifier","replaceWith","variableDeclaration","variableDeclarator","toExpression","ClassExpression","state","has","_path$ensureFunctionN","ensureFunctionName","replacement","add","replacedPath","transformClass","file","isCallExpression","annotateAsPure","callee","isArrowFunctionExpression","arrowFunctionToExpression"],"sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { isRequired } from \"@babel/helper-compilation-targets\";\nimport annotateAsPure from \"@babel/helper-annotate-as-pure\";\nimport { types as t } from \"@babel/core\";\nimport globalsBrowserUpper from \"@babel/helper-globals/data/browser-upper.json\" with { type: \"json\" };\nimport globalsBuiltinUpper from \"@babel/helper-globals/data/builtin-upper.json\" with { type: \"json\" };\nimport transformClass from \"./transformClass.ts\";\n\nconst builtinClasses = new Set([\n ...globalsBrowserUpper,\n ...globalsBuiltinUpper,\n]);\n\n// The \"Iterator\" global is removed because the Babel construct helper\n// packages/babel-helpers/src/helpers/construct.ts, emitted from the wrapNativeSuper helper,\n// // will invoke it with `new Iterator()` when native Reflect.construct is not available.\n// However, the abstract class Iterator can not be invoked with new. Since the `builtinClasses`\n// is used for the superIsCallableConstructor assumption, we should prioritize the spec mode\nbuiltinClasses.delete(\"Iterator\");\n\nexport interface Options {\n loose?: boolean;\n}\n\nexport default declare((api, options: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n\n const { loose = false } = options;\n\n const setClassMethods = api.assumption(\"setClassMethods\") ?? loose;\n const constantSuper = api.assumption(\"constantSuper\") ?? loose;\n const superIsCallableConstructor =\n api.assumption(\"superIsCallableConstructor\") ?? loose;\n const noClassCalls = api.assumption(\"noClassCalls\") ?? loose;\n const supportUnicodeId = !isRequired(\n \"transform-unicode-escapes\",\n api.targets(),\n );\n\n // todo: investigate traversal requeueing\n const VISITED = new WeakSet();\n\n return {\n name: \"transform-classes\",\n\n visitor: {\n ExportDefaultDeclaration(path) {\n if (!path.get(\"declaration\").isClassDeclaration()) return;\n if (!process.env.BABEL_8_BREAKING && !USE_ESM && !IS_STANDALONE) {\n // polyfill when being run by an older Babel version\n path.splitExportDeclaration ??=\n // eslint-disable-next-line no-restricted-globals\n require(\"@babel/traverse\").NodePath.prototype.splitExportDeclaration;\n }\n path.splitExportDeclaration();\n },\n\n ClassDeclaration(path) {\n const { node } = path;\n\n const ref = node.id\n ? t.cloneNode(node.id)\n : path.scope.generateUidIdentifier(\"class\");\n\n path.replaceWith(\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(ref, t.toExpression(node)),\n ]),\n );\n },\n\n ClassExpression(path, state) {\n const { node } = path;\n if (VISITED.has(node)) return;\n\n if (!process.env.BABEL_8_BREAKING && !USE_ESM && !IS_STANDALONE) {\n // polyfill when being run by an older Babel version\n path.ensureFunctionName ??=\n // eslint-disable-next-line no-restricted-globals\n require(\"@babel/traverse\").NodePath.prototype.ensureFunctionName;\n }\n const replacement = path.ensureFunctionName(supportUnicodeId);\n if (replacement && replacement.node !== node) return;\n\n VISITED.add(node);\n\n const [replacedPath] = path.replaceWith(\n transformClass(\n path,\n state.file,\n builtinClasses,\n loose,\n {\n setClassMethods,\n constantSuper,\n superIsCallableConstructor,\n noClassCalls,\n },\n supportUnicodeId,\n ),\n );\n\n if (replacedPath.isCallExpression()) {\n annotateAsPure(replacedPath);\n const callee = replacedPath.get(\"callee\");\n if (callee.isArrowFunctionExpression()) {\n // This is an IIFE, so we don't need to worry about the noNewArrows assumption\n callee.arrowFunctionToExpression();\n }\n }\n },\n },\n };\n});\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js deleted file mode 100644 index c67e343e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = addCallSuperHelper; -var _core = require("@babel/core"); -const helper = _core.template.statement` - function CALL_SUPER( - _this, - derived, - args, - ) { - function isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - - // core-js@3 - if (Reflect.construct.sham) return false; - - // Proxy can't be polyfilled. Every browser implemented - // proxies before or at the same time as Reflect.construct, - // so if they support Proxy they also support Reflect.construct. - if (typeof Proxy === "function") return true; - - // Since Reflect.construct can't be properly polyfilled, some - // implementations (e.g. core-js@2) don't set the correct internal slots. - // Those polyfills don't allow us to subclass built-ins, so we need to - // use our fallback implementation. - try { - // If the internal slots aren't set, this throws an error similar to - // TypeError: this is not a Boolean object. - return !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}),); - } catch (e) { - return false; - } - } - - // Super - derived = GET_PROTOTYPE_OF(derived); - return POSSIBLE_CONSTRUCTOR_RETURN( - _this, - isNativeReflectConstruct() - ? // NOTE: This doesn't work if this.__proto__.constructor has been modified. - Reflect.construct( - derived, - args || [], - GET_PROTOTYPE_OF(_this).constructor, - ) - : derived.apply(_this, args), - ); - } -`; -const helperIDs = new WeakMap(); -function addCallSuperHelper(file) { - if (helperIDs.has(file)) { - { - return (_core.types.cloneNode || _core.types.clone)(helperIDs.get(file)); - } - } - try { - return file.addHelper("callSuper"); - } catch (_unused) {} - const id = file.scope.generateUidIdentifier("callSuper"); - helperIDs.set(file, id); - const fn = helper({ - CALL_SUPER: id, - GET_PROTOTYPE_OF: file.addHelper("getPrototypeOf"), - POSSIBLE_CONSTRUCTOR_RETURN: file.addHelper("possibleConstructorReturn") - }); - const [fnPath] = file.path.unshiftContainer("body", [fn]); - file.scope.registerDeclaration(fnPath); - return _core.types.cloneNode(id); -} - -//# sourceMappingURL=inline-callSuper-helpers.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js.map deleted file mode 100644 index 5103feda..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/inline-callSuper-helpers.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_core","require","helper","template","statement","helperIDs","WeakMap","addCallSuperHelper","file","has","t","cloneNode","clone","get","addHelper","_unused","id","scope","generateUidIdentifier","set","fn","CALL_SUPER","GET_PROTOTYPE_OF","POSSIBLE_CONSTRUCTOR_RETURN","fnPath","path","unshiftContainer","registerDeclaration"],"sources":["../src/inline-callSuper-helpers.ts"],"sourcesContent":["import { template, types as t, type File } from \"@babel/core\";\n\nconst helper = template.statement`\n function CALL_SUPER(\n _this,\n derived,\n args,\n ) {\n function isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n\n // core-js@3\n if (Reflect.construct.sham) return false;\n\n // Proxy can't be polyfilled. Every browser implemented\n // proxies before or at the same time as Reflect.construct,\n // so if they support Proxy they also support Reflect.construct.\n if (typeof Proxy === \"function\") return true;\n\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n return !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}),);\n } catch (e) {\n return false;\n }\n }\n\n // Super\n derived = GET_PROTOTYPE_OF(derived);\n return POSSIBLE_CONSTRUCTOR_RETURN(\n _this,\n isNativeReflectConstruct()\n ? // NOTE: This doesn't work if this.__proto__.constructor has been modified.\n Reflect.construct(\n derived,\n args || [],\n GET_PROTOTYPE_OF(_this).constructor,\n )\n : derived.apply(_this, args),\n );\n }\n`;\n\nconst helperIDs = new WeakMap();\n\nexport default function addCallSuperHelper(file: File) {\n if (helperIDs.has(file)) {\n if (process.env.BABEL_8_BREAKING) {\n return t.cloneNode(helperIDs.get(file));\n } else {\n // t.cloneNode isn't supported in every version\n return (t.cloneNode || t.clone)(helperIDs.get(file));\n }\n }\n\n try {\n return file.addHelper(\"callSuper\");\n } catch {\n // old Babel doesn't support the helper.\n }\n\n const id = file.scope.generateUidIdentifier(\"callSuper\");\n helperIDs.set(file, id);\n\n const fn = helper({\n CALL_SUPER: id,\n GET_PROTOTYPE_OF: file.addHelper(\"getPrototypeOf\"),\n POSSIBLE_CONSTRUCTOR_RETURN: file.addHelper(\"possibleConstructorReturn\"),\n });\n\n const [fnPath] = file.path.unshiftContainer(\"body\", [fn]);\n file.scope.registerDeclaration(fnPath);\n\n return t.cloneNode(id);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,MAAMC,MAAM,GAAGC,cAAQ,CAACC,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,SAAS,GAAG,IAAIC,OAAO,CAAC,CAAC;AAEhB,SAASC,kBAAkBA,CAACC,IAAU,EAAE;EACrD,IAAIH,SAAS,CAACI,GAAG,CAACD,IAAI,CAAC,EAAE;IAGhB;MAEL,OAAO,CAACE,WAAC,CAACC,SAAS,IAAID,WAAC,CAACE,KAAK,EAAEP,SAAS,CAACQ,GAAG,CAACL,IAAI,CAAC,CAAC;IACtD;EACF;EAEA,IAAI;IACF,OAAOA,IAAI,CAACM,SAAS,CAAC,WAAW,CAAC;EACpC,CAAC,CAAC,OAAAC,OAAA,EAAM,CAER;EAEA,MAAMC,EAAE,GAAGR,IAAI,CAACS,KAAK,CAACC,qBAAqB,CAAC,WAAW,CAAC;EACxDb,SAAS,CAACc,GAAG,CAACX,IAAI,EAAEQ,EAAE,CAAC;EAEvB,MAAMI,EAAE,GAAGlB,MAAM,CAAC;IAChBmB,UAAU,EAAEL,EAAE;IACdM,gBAAgB,EAAEd,IAAI,CAACM,SAAS,CAAC,gBAAgB,CAAC;IAClDS,2BAA2B,EAAEf,IAAI,CAACM,SAAS,CAAC,2BAA2B;EACzE,CAAC,CAAC;EAEF,MAAM,CAACU,MAAM,CAAC,GAAGhB,IAAI,CAACiB,IAAI,CAACC,gBAAgB,CAAC,MAAM,EAAE,CAACN,EAAE,CAAC,CAAC;EACzDZ,IAAI,CAACS,KAAK,CAACU,mBAAmB,CAACH,MAAM,CAAC;EAEtC,OAAOd,WAAC,CAACC,SAAS,CAACK,EAAE,CAAC;AACxB","ignoreList":[]} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js deleted file mode 100644 index e32bcd53..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js +++ /dev/null @@ -1,540 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = transformClass; -var _helperReplaceSupers = require("@babel/helper-replace-supers"); -var _core = require("@babel/core"); -var _traverse = require("@babel/traverse"); -var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure"); -var _inlineCallSuperHelpers = require("./inline-callSuper-helpers.js"); -function buildConstructor(classRef, constructorBody, node) { - const func = _core.types.functionDeclaration(_core.types.cloneNode(classRef), [], constructorBody); - _core.types.inherits(func, node); - return func; -} -function transformClass(path, file, builtinClasses, isLoose, assumptions, supportUnicodeId) { - const classState = { - parent: undefined, - scope: undefined, - node: undefined, - path: undefined, - file: undefined, - classId: undefined, - classRef: undefined, - superName: null, - superReturns: [], - isDerived: false, - extendsNative: false, - construct: undefined, - constructorBody: undefined, - userConstructor: undefined, - userConstructorPath: undefined, - hasConstructor: false, - body: [], - superThises: [], - pushedInherits: false, - pushedCreateClass: false, - protoAlias: null, - isLoose: false, - dynamicKeys: new Map(), - methods: { - instance: { - hasComputed: false, - list: [], - map: new Map() - }, - static: { - hasComputed: false, - list: [], - map: new Map() - } - } - }; - const setState = newState => { - Object.assign(classState, newState); - }; - const findThisesVisitor = _traverse.visitors.environmentVisitor({ - ThisExpression(path) { - classState.superThises.push(path); - } - }); - function createClassHelper(args) { - return _core.types.callExpression(classState.file.addHelper("createClass"), args); - } - function maybeCreateConstructor() { - const classBodyPath = classState.path.get("body"); - for (const path of classBodyPath.get("body")) { - if (path.isClassMethod({ - kind: "constructor" - })) return; - } - const params = []; - let body; - if (classState.isDerived) { - body = _core.template.statement.ast`{ - super(...arguments); - }`; - } else { - body = _core.types.blockStatement([]); - } - classBodyPath.unshiftContainer("body", _core.types.classMethod("constructor", _core.types.identifier("constructor"), params, body)); - } - function buildBody() { - maybeCreateConstructor(); - pushBody(); - verifyConstructor(); - if (classState.userConstructor) { - const { - constructorBody, - userConstructor, - construct - } = classState; - constructorBody.body.push(...userConstructor.body.body); - _core.types.inherits(construct, userConstructor); - _core.types.inherits(constructorBody, userConstructor.body); - } - pushDescriptors(); - } - function pushBody() { - const classBodyPaths = classState.path.get("body.body"); - for (const path of classBodyPaths) { - const node = path.node; - if (path.isClassProperty() || path.isClassPrivateProperty()) { - throw path.buildCodeFrameError("Missing class properties transform."); - } - if (node.decorators) { - throw path.buildCodeFrameError("Method has decorators, put the decorator plugin before the classes one."); - } - if (_core.types.isClassMethod(node)) { - const isConstructor = node.kind === "constructor"; - const replaceSupers = new _helperReplaceSupers.default({ - methodPath: path, - objectRef: classState.classRef, - superRef: classState.superName, - constantSuper: assumptions.constantSuper, - file: classState.file, - refToPreserve: classState.classRef - }); - replaceSupers.replace(); - const superReturns = []; - path.traverse(_traverse.visitors.environmentVisitor({ - ReturnStatement(path) { - if (!path.getFunctionParent().isArrowFunctionExpression()) { - superReturns.push(path); - } - } - })); - if (isConstructor) { - pushConstructor(superReturns, node, path); - } else { - { - var _path$ensureFunctionN; - (_path$ensureFunctionN = path.ensureFunctionName) != null ? _path$ensureFunctionN : path.ensureFunctionName = require("@babel/traverse").NodePath.prototype.ensureFunctionName; - } - path.ensureFunctionName(supportUnicodeId); - let wrapped; - if (node !== path.node) { - wrapped = path.node; - path.replaceWith(node); - } - pushMethod(node, wrapped); - } - } - } - } - function pushDescriptors() { - pushInheritsToBody(); - const { - body - } = classState; - const props = { - instance: null, - static: null - }; - for (const placement of ["static", "instance"]) { - if (classState.methods[placement].list.length) { - props[placement] = classState.methods[placement].list.map(desc => { - const obj = _core.types.objectExpression([_core.types.objectProperty(_core.types.identifier("key"), desc.key)]); - for (const kind of ["get", "set", "value"]) { - if (desc[kind] != null) { - obj.properties.push(_core.types.objectProperty(_core.types.identifier(kind), desc[kind])); - } - } - return obj; - }); - } - } - if (props.instance || props.static) { - let args = [_core.types.cloneNode(classState.classRef), props.instance ? _core.types.arrayExpression(props.instance) : _core.types.nullLiteral(), props.static ? _core.types.arrayExpression(props.static) : _core.types.nullLiteral()]; - let lastNonNullIndex = 0; - for (let i = 0; i < args.length; i++) { - if (!_core.types.isNullLiteral(args[i])) lastNonNullIndex = i; - } - args = args.slice(0, lastNonNullIndex + 1); - body.push(_core.types.returnStatement(createClassHelper(args))); - classState.pushedCreateClass = true; - } - } - function wrapSuperCall(bareSuper, superRef, thisRef, body) { - const bareSuperNode = bareSuper.node; - let call; - if (assumptions.superIsCallableConstructor) { - bareSuperNode.arguments.unshift(_core.types.thisExpression()); - if (bareSuperNode.arguments.length === 2 && _core.types.isSpreadElement(bareSuperNode.arguments[1]) && _core.types.isIdentifier(bareSuperNode.arguments[1].argument, { - name: "arguments" - })) { - bareSuperNode.arguments[1] = bareSuperNode.arguments[1].argument; - bareSuperNode.callee = _core.types.memberExpression(_core.types.cloneNode(superRef), _core.types.identifier("apply")); - } else { - bareSuperNode.callee = _core.types.memberExpression(_core.types.cloneNode(superRef), _core.types.identifier("call")); - } - call = _core.types.logicalExpression("||", bareSuperNode, _core.types.thisExpression()); - } else { - var _bareSuperNode$argume; - const args = [_core.types.thisExpression(), _core.types.cloneNode(classState.classRef)]; - if ((_bareSuperNode$argume = bareSuperNode.arguments) != null && _bareSuperNode$argume.length) { - const bareSuperNodeArguments = bareSuperNode.arguments; - if (bareSuperNodeArguments.length === 1 && _core.types.isSpreadElement(bareSuperNodeArguments[0]) && _core.types.isIdentifier(bareSuperNodeArguments[0].argument, { - name: "arguments" - })) { - args.push(bareSuperNodeArguments[0].argument); - } else { - args.push(_core.types.arrayExpression(bareSuperNodeArguments)); - } - } - call = _core.types.callExpression((0, _inlineCallSuperHelpers.default)(classState.file), args); - } - if (bareSuper.parentPath.isExpressionStatement() && bareSuper.parentPath.container === body.node.body && body.node.body.length - 1 === bareSuper.parentPath.key) { - if (classState.superThises.length) { - call = _core.types.assignmentExpression("=", thisRef(), call); - } - bareSuper.parentPath.replaceWith(_core.types.returnStatement(call)); - } else { - bareSuper.replaceWith(_core.types.assignmentExpression("=", thisRef(), call)); - } - } - function verifyConstructor() { - if (!classState.isDerived) return; - const path = classState.userConstructorPath; - const body = path.get("body"); - const constructorBody = path.get("body"); - let maxGuaranteedSuperBeforeIndex = constructorBody.node.body.length; - path.traverse(findThisesVisitor); - let thisRef = function () { - const ref = path.scope.generateDeclaredUidIdentifier("this"); - maxGuaranteedSuperBeforeIndex++; - thisRef = () => _core.types.cloneNode(ref); - return ref; - }; - const buildAssertThisInitialized = function () { - return _core.types.callExpression(classState.file.addHelper("assertThisInitialized"), [thisRef()]); - }; - const bareSupers = []; - path.traverse(_traverse.visitors.environmentVisitor({ - Super(path) { - const { - node, - parentPath - } = path; - if (parentPath.isCallExpression({ - callee: node - })) { - bareSupers.unshift(parentPath); - } - } - })); - for (const bareSuper of bareSupers) { - wrapSuperCall(bareSuper, classState.superName, thisRef, body); - if (maxGuaranteedSuperBeforeIndex >= 0) { - let lastParentPath; - bareSuper.find(function (parentPath) { - if (parentPath === constructorBody) { - maxGuaranteedSuperBeforeIndex = Math.min(maxGuaranteedSuperBeforeIndex, lastParentPath.key); - return true; - } - const { - type - } = parentPath; - switch (type) { - case "ExpressionStatement": - case "SequenceExpression": - case "AssignmentExpression": - case "BinaryExpression": - case "MemberExpression": - case "CallExpression": - case "NewExpression": - case "VariableDeclarator": - case "VariableDeclaration": - case "BlockStatement": - case "ArrayExpression": - case "ObjectExpression": - case "ObjectProperty": - case "TemplateLiteral": - lastParentPath = parentPath; - return false; - default: - if (type === "LogicalExpression" && parentPath.node.left === lastParentPath.node || parentPath.isConditional() && parentPath.node.test === lastParentPath.node || type === "OptionalCallExpression" && parentPath.node.callee === lastParentPath.node || type === "OptionalMemberExpression" && parentPath.node.object === lastParentPath.node) { - lastParentPath = parentPath; - return false; - } - } - maxGuaranteedSuperBeforeIndex = -1; - return true; - }); - } - } - const guaranteedCalls = new Set(); - for (const thisPath of classState.superThises) { - const { - node, - parentPath - } = thisPath; - if (parentPath.isMemberExpression({ - object: node - })) { - thisPath.replaceWith(thisRef()); - continue; - } - let thisIndex; - thisPath.find(function (parentPath) { - if (parentPath.parentPath === constructorBody) { - thisIndex = parentPath.key; - return true; - } - }); - let exprPath = thisPath.parentPath.isSequenceExpression() ? thisPath.parentPath : thisPath; - if (exprPath.listKey === "arguments" && (exprPath.parentPath.isCallExpression() || exprPath.parentPath.isOptionalCallExpression())) { - exprPath = exprPath.parentPath; - } else { - exprPath = null; - } - if (maxGuaranteedSuperBeforeIndex !== -1 && thisIndex > maxGuaranteedSuperBeforeIndex || guaranteedCalls.has(exprPath)) { - thisPath.replaceWith(thisRef()); - } else { - if (exprPath) { - guaranteedCalls.add(exprPath); - } - thisPath.replaceWith(buildAssertThisInitialized()); - } - } - let wrapReturn; - if (classState.isLoose) { - wrapReturn = returnArg => { - const thisExpr = buildAssertThisInitialized(); - return returnArg ? _core.types.logicalExpression("||", returnArg, thisExpr) : thisExpr; - }; - } else { - wrapReturn = returnArg => { - const returnParams = [thisRef()]; - if (returnArg != null) { - returnParams.push(returnArg); - } - return _core.types.callExpression(classState.file.addHelper("possibleConstructorReturn"), returnParams); - }; - } - const bodyPaths = body.get("body"); - const guaranteedSuperBeforeFinish = maxGuaranteedSuperBeforeIndex !== -1 && maxGuaranteedSuperBeforeIndex < bodyPaths.length; - if (!bodyPaths.length || !bodyPaths.pop().isReturnStatement()) { - body.pushContainer("body", _core.types.returnStatement(guaranteedSuperBeforeFinish ? thisRef() : buildAssertThisInitialized())); - } - for (const returnPath of classState.superReturns) { - returnPath.get("argument").replaceWith(wrapReturn(returnPath.node.argument)); - } - } - function pushMethod(node, wrapped) { - if (node.kind === "method") { - if (processMethod(node)) return; - } - const placement = node.static ? "static" : "instance"; - const methods = classState.methods[placement]; - const descKey = node.kind === "method" ? "value" : node.kind; - const key = _core.types.isNumericLiteral(node.key) || _core.types.isBigIntLiteral(node.key) ? _core.types.stringLiteral(String(node.key.value)) : _core.types.toComputedKey(node); - methods.hasComputed = !_core.types.isStringLiteral(key); - const fn = wrapped != null ? wrapped : _core.types.toExpression(node); - let descriptor; - if (!methods.hasComputed && methods.map.has(key.value)) { - descriptor = methods.map.get(key.value); - descriptor[descKey] = fn; - if (descKey === "value") { - descriptor.get = null; - descriptor.set = null; - } else { - descriptor.value = null; - } - } else { - descriptor = { - key: key, - [descKey]: fn - }; - methods.list.push(descriptor); - if (!methods.hasComputed) { - methods.map.set(key.value, descriptor); - } - } - } - function processMethod(node) { - if (assumptions.setClassMethods && !node.decorators) { - let { - classRef - } = classState; - if (!node.static) { - insertProtoAliasOnce(); - classRef = classState.protoAlias; - } - const methodName = _core.types.memberExpression(_core.types.cloneNode(classRef), node.key, node.computed || _core.types.isLiteral(node.key)); - const func = _core.types.functionExpression(node.id, node.params, node.body, node.generator, node.async); - _core.types.inherits(func, node); - const expr = _core.types.expressionStatement(_core.types.assignmentExpression("=", methodName, func)); - _core.types.inheritsComments(expr, node); - classState.body.push(expr); - return true; - } - return false; - } - function insertProtoAliasOnce() { - if (classState.protoAlias === null) { - setState({ - protoAlias: classState.scope.generateUidIdentifier("proto") - }); - const classProto = _core.types.memberExpression(classState.classRef, _core.types.identifier("prototype")); - const protoDeclaration = _core.types.variableDeclaration("var", [_core.types.variableDeclarator(classState.protoAlias, classProto)]); - classState.body.push(protoDeclaration); - } - } - function pushConstructor(superReturns, method, path) { - setState({ - userConstructorPath: path, - userConstructor: method, - hasConstructor: true, - superReturns - }); - const { - construct - } = classState; - _core.types.inheritsComments(construct, method); - construct.params = method.params; - _core.types.inherits(construct.body, method.body); - construct.body.directives = method.body.directives; - if (classState.hasInstanceDescriptors || classState.hasStaticDescriptors) { - pushDescriptors(); - } - pushInheritsToBody(); - } - function pushInheritsToBody() { - if (!classState.isDerived || classState.pushedInherits) return; - classState.pushedInherits = true; - classState.body.unshift(_core.types.expressionStatement(_core.types.callExpression(classState.file.addHelper(classState.isLoose ? "inheritsLoose" : "inherits"), [_core.types.cloneNode(classState.classRef), _core.types.cloneNode(classState.superName)]))); - } - function extractDynamicKeys() { - const { - dynamicKeys, - node, - scope - } = classState; - for (const elem of node.body.body) { - if (!_core.types.isClassMethod(elem) || !elem.computed) continue; - if (scope.isPure(elem.key, true)) continue; - const id = scope.generateUidIdentifierBasedOnNode(elem.key); - dynamicKeys.set(id.name, elem.key); - elem.key = id; - } - } - function setupClosureParamsArgs() { - const { - superName, - dynamicKeys - } = classState; - const closureParams = []; - const closureArgs = []; - if (classState.isDerived) { - let arg = _core.types.cloneNode(superName); - if (classState.extendsNative) { - arg = _core.types.callExpression(classState.file.addHelper("wrapNativeSuper"), [arg]); - (0, _helperAnnotateAsPure.default)(arg); - } - const param = classState.scope.generateUidIdentifierBasedOnNode(superName); - closureParams.push(param); - closureArgs.push(arg); - setState({ - superName: _core.types.cloneNode(param) - }); - } - for (const [name, value] of dynamicKeys) { - closureParams.push(_core.types.identifier(name)); - closureArgs.push(value); - } - return { - closureParams, - closureArgs - }; - } - function classTransformer(path, file, builtinClasses, isLoose) { - setState({ - parent: path.parent, - scope: path.scope, - node: path.node, - path, - file, - isLoose - }); - setState({ - classId: classState.node.id, - classRef: classState.node.id ? _core.types.identifier(classState.node.id.name) : classState.scope.generateUidIdentifier("class"), - superName: classState.node.superClass, - isDerived: !!classState.node.superClass, - constructorBody: _core.types.blockStatement([]) - }); - setState({ - extendsNative: _core.types.isIdentifier(classState.superName) && builtinClasses.has(classState.superName.name) && !classState.scope.hasBinding(classState.superName.name, true) - }); - const { - classRef, - node, - constructorBody - } = classState; - setState({ - construct: buildConstructor(classRef, constructorBody, node) - }); - extractDynamicKeys(); - const { - body - } = classState; - const { - closureParams, - closureArgs - } = setupClosureParamsArgs(); - buildBody(); - if (!assumptions.noClassCalls) { - constructorBody.body.unshift(_core.types.expressionStatement(_core.types.callExpression(classState.file.addHelper("classCallCheck"), [_core.types.thisExpression(), _core.types.cloneNode(classState.classRef)]))); - } - const isStrict = path.isInStrictMode(); - let constructorOnly = body.length === 0; - if (constructorOnly && !isStrict) { - for (const param of classState.construct.params) { - if (!_core.types.isIdentifier(param)) { - constructorOnly = false; - break; - } - } - } - const directives = constructorOnly ? classState.construct.body.directives : []; - if (!isStrict) { - directives.push(_core.types.directive(_core.types.directiveLiteral("use strict"))); - } - if (constructorOnly) { - const expr = _core.types.toExpression(classState.construct); - return classState.isLoose ? expr : createClassHelper([expr]); - } - if (!classState.pushedCreateClass) { - body.push(_core.types.returnStatement(classState.isLoose ? _core.types.cloneNode(classState.classRef) : createClassHelper([_core.types.cloneNode(classState.classRef)]))); - } - body.unshift(classState.construct); - const container = _core.types.arrowFunctionExpression(closureParams, _core.types.blockStatement(body, directives)); - return _core.types.callExpression(container, closureArgs); - } - return classTransformer(path, file, builtinClasses, isLoose); -} - -//# sourceMappingURL=transformClass.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js.map deleted file mode 100644 index c4d767d3..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/lib/transformClass.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_helperReplaceSupers","require","_core","_traverse","_helperAnnotateAsPure","_inlineCallSuperHelpers","buildConstructor","classRef","constructorBody","node","func","t","functionDeclaration","cloneNode","inherits","transformClass","path","file","builtinClasses","isLoose","assumptions","supportUnicodeId","classState","parent","undefined","scope","classId","superName","superReturns","isDerived","extendsNative","construct","userConstructor","userConstructorPath","hasConstructor","body","superThises","pushedInherits","pushedCreateClass","protoAlias","dynamicKeys","Map","methods","instance","hasComputed","list","map","static","setState","newState","Object","assign","findThisesVisitor","visitors","environmentVisitor","ThisExpression","push","createClassHelper","args","callExpression","addHelper","maybeCreateConstructor","classBodyPath","get","isClassMethod","kind","params","template","statement","ast","blockStatement","unshiftContainer","classMethod","identifier","buildBody","pushBody","verifyConstructor","pushDescriptors","classBodyPaths","isClassProperty","isClassPrivateProperty","buildCodeFrameError","decorators","isConstructor","replaceSupers","ReplaceSupers","methodPath","objectRef","superRef","constantSuper","refToPreserve","replace","traverse","ReturnStatement","getFunctionParent","isArrowFunctionExpression","pushConstructor","_path$ensureFunctionN","ensureFunctionName","NodePath","prototype","wrapped","replaceWith","pushMethod","pushInheritsToBody","props","placement","length","desc","obj","objectExpression","objectProperty","key","properties","arrayExpression","nullLiteral","lastNonNullIndex","i","isNullLiteral","slice","returnStatement","wrapSuperCall","bareSuper","thisRef","bareSuperNode","call","superIsCallableConstructor","arguments","unshift","thisExpression","isSpreadElement","isIdentifier","argument","name","callee","memberExpression","logicalExpression","_bareSuperNode$argume","bareSuperNodeArguments","addCallSuperHelper","parentPath","isExpressionStatement","container","assignmentExpression","maxGuaranteedSuperBeforeIndex","ref","generateDeclaredUidIdentifier","buildAssertThisInitialized","bareSupers","Super","isCallExpression","lastParentPath","find","Math","min","type","left","isConditional","test","object","guaranteedCalls","Set","thisPath","isMemberExpression","thisIndex","exprPath","isSequenceExpression","listKey","isOptionalCallExpression","has","add","wrapReturn","returnArg","thisExpr","returnParams","bodyPaths","guaranteedSuperBeforeFinish","pop","isReturnStatement","pushContainer","returnPath","processMethod","descKey","isNumericLiteral","isBigIntLiteral","stringLiteral","String","value","toComputedKey","isStringLiteral","fn","toExpression","descriptor","set","setClassMethods","insertProtoAliasOnce","methodName","computed","isLiteral","functionExpression","id","generator","async","expr","expressionStatement","inheritsComments","generateUidIdentifier","classProto","protoDeclaration","variableDeclaration","variableDeclarator","method","directives","hasInstanceDescriptors","hasStaticDescriptors","extractDynamicKeys","elem","isPure","generateUidIdentifierBasedOnNode","setupClosureParamsArgs","closureParams","closureArgs","arg","annotateAsPure","param","classTransformer","superClass","hasBinding","noClassCalls","isStrict","isInStrictMode","constructorOnly","directive","directiveLiteral","arrowFunctionExpression"],"sources":["../src/transformClass.ts"],"sourcesContent":["import type { NodePath, Scope, File } from \"@babel/core\";\nimport ReplaceSupers from \"@babel/helper-replace-supers\";\nimport { template, types as t } from \"@babel/core\";\nimport { visitors } from \"@babel/traverse\";\nimport annotateAsPure from \"@babel/helper-annotate-as-pure\";\n\nimport addCallSuperHelper from \"./inline-callSuper-helpers.ts\";\n\ntype ClassAssumptions = {\n setClassMethods: boolean;\n constantSuper: boolean;\n superIsCallableConstructor: boolean;\n noClassCalls: boolean;\n};\n\ntype ClassConstructor = t.ClassMethod & { kind: \"constructor\" };\n\nfunction buildConstructor(\n classRef: t.Identifier,\n constructorBody: t.BlockStatement,\n node: t.Class,\n) {\n const func = t.functionDeclaration(\n t.cloneNode(classRef),\n [],\n constructorBody,\n );\n t.inherits(func, node);\n return func;\n}\n\ntype Descriptor = {\n key: t.Expression;\n get?: t.Expression | null;\n set?: t.Expression | null;\n value?: t.Expression | null;\n constructor?: t.Expression | null;\n};\n\ntype State = {\n parent: t.Node;\n scope: Scope;\n node: t.Class;\n path: NodePath;\n file: File;\n\n classId: t.Identifier | void;\n classRef: t.Identifier;\n superName: t.Expression | null;\n superReturns: NodePath[];\n isDerived: boolean;\n extendsNative: boolean;\n\n construct: t.FunctionDeclaration;\n constructorBody: t.BlockStatement;\n userConstructor: ClassConstructor;\n userConstructorPath: NodePath;\n hasConstructor: boolean;\n\n body: t.Statement[];\n superThises: NodePath[];\n pushedInherits: boolean;\n pushedCreateClass: boolean;\n protoAlias: t.Identifier | null;\n isLoose: boolean;\n\n dynamicKeys: Map;\n\n methods: {\n // 'list' is in the same order as the elements appear in the class body.\n // if there aren't computed keys, we can safely reorder class elements\n // and use 'map' to merge duplicates.\n instance: {\n hasComputed: boolean;\n list: Descriptor[];\n map: Map;\n };\n static: {\n hasComputed: boolean;\n list: Descriptor[];\n map: Map;\n };\n };\n};\n\ntype PropertyInfo = {\n instance: t.ObjectExpression[] | null;\n static: t.ObjectExpression[] | null;\n};\n\nexport default function transformClass(\n path: NodePath,\n file: File,\n builtinClasses: ReadonlySet,\n isLoose: boolean,\n assumptions: ClassAssumptions,\n supportUnicodeId: boolean,\n) {\n const classState: State = {\n parent: undefined,\n scope: undefined,\n node: undefined,\n path: undefined,\n file: undefined,\n\n classId: undefined,\n classRef: undefined,\n superName: null,\n superReturns: [],\n isDerived: false,\n extendsNative: false,\n\n construct: undefined,\n constructorBody: undefined,\n userConstructor: undefined,\n userConstructorPath: undefined,\n hasConstructor: false,\n\n body: [],\n superThises: [],\n pushedInherits: false,\n pushedCreateClass: false,\n protoAlias: null,\n isLoose: false,\n\n dynamicKeys: new Map(),\n\n methods: {\n instance: {\n hasComputed: false,\n list: [],\n map: new Map(),\n },\n static: {\n hasComputed: false,\n list: [],\n map: new Map(),\n },\n },\n };\n\n const setState = (newState: Partial) => {\n Object.assign(classState, newState);\n };\n\n const findThisesVisitor = visitors.environmentVisitor({\n ThisExpression(path) {\n classState.superThises.push(path);\n },\n });\n\n function createClassHelper(args: t.Expression[]) {\n return t.callExpression(classState.file.addHelper(\"createClass\"), args);\n }\n\n /**\n * Creates a class constructor or bail out if there is one\n */\n function maybeCreateConstructor() {\n const classBodyPath = classState.path.get(\"body\");\n for (const path of classBodyPath.get(\"body\")) {\n if (path.isClassMethod({ kind: \"constructor\" })) return;\n }\n\n const params: t.FunctionExpression[\"params\"] = [];\n let body;\n\n if (classState.isDerived) {\n body = template.statement.ast`{\n super(...arguments);\n }` as t.BlockStatement;\n } else {\n body = t.blockStatement([]);\n }\n\n classBodyPath.unshiftContainer(\n \"body\",\n t.classMethod(\"constructor\", t.identifier(\"constructor\"), params, body),\n );\n }\n\n function buildBody() {\n maybeCreateConstructor();\n pushBody();\n verifyConstructor();\n\n if (classState.userConstructor) {\n const { constructorBody, userConstructor, construct } = classState;\n\n constructorBody.body.push(...userConstructor.body.body);\n t.inherits(construct, userConstructor);\n t.inherits(constructorBody, userConstructor.body);\n }\n\n pushDescriptors();\n }\n\n function pushBody() {\n const classBodyPaths: Array = classState.path.get(\"body.body\");\n\n for (const path of classBodyPaths) {\n const node = path.node;\n\n if (path.isClassProperty() || path.isClassPrivateProperty()) {\n throw path.buildCodeFrameError(\"Missing class properties transform.\");\n }\n\n if (node.decorators) {\n throw path.buildCodeFrameError(\n \"Method has decorators, put the decorator plugin before the classes one.\",\n );\n }\n\n if (t.isClassMethod(node)) {\n const isConstructor = node.kind === \"constructor\";\n\n const replaceSupers = new ReplaceSupers({\n methodPath: path,\n objectRef: classState.classRef,\n superRef: classState.superName,\n constantSuper: assumptions.constantSuper,\n file: classState.file,\n refToPreserve: classState.classRef,\n });\n\n replaceSupers.replace();\n\n const superReturns: NodePath[] = [];\n path.traverse(\n visitors.environmentVisitor({\n ReturnStatement(path) {\n if (!path.getFunctionParent().isArrowFunctionExpression()) {\n superReturns.push(path);\n }\n },\n }),\n );\n\n if (isConstructor) {\n pushConstructor(superReturns, node as ClassConstructor, path);\n } else {\n if (!process.env.BABEL_8_BREAKING && !USE_ESM && !IS_STANDALONE) {\n // polyfill when being run by an older Babel version\n path.ensureFunctionName ??=\n // eslint-disable-next-line no-restricted-globals\n require(\"@babel/traverse\").NodePath.prototype.ensureFunctionName;\n }\n path.ensureFunctionName(supportUnicodeId);\n let wrapped;\n if (node !== path.node) {\n wrapped = path.node;\n // The node has been wrapped. Reset it to the original once, but store the wrapper.\n path.replaceWith(node);\n }\n\n pushMethod(node, wrapped);\n }\n }\n }\n }\n\n function pushDescriptors() {\n pushInheritsToBody();\n\n const { body } = classState;\n\n const props: PropertyInfo = {\n instance: null,\n static: null,\n };\n\n for (const placement of [\"static\", \"instance\"] as const) {\n if (classState.methods[placement].list.length) {\n props[placement] = classState.methods[placement].list.map(desc => {\n const obj = t.objectExpression([\n t.objectProperty(t.identifier(\"key\"), desc.key),\n ]);\n\n for (const kind of [\"get\", \"set\", \"value\"] as const) {\n if (desc[kind] != null) {\n obj.properties.push(\n t.objectProperty(t.identifier(kind), desc[kind]),\n );\n }\n }\n\n return obj;\n });\n }\n }\n\n if (props.instance || props.static) {\n let args = [\n t.cloneNode(classState.classRef), // Constructor\n props.instance ? t.arrayExpression(props.instance) : t.nullLiteral(), // instanceDescriptors\n props.static ? t.arrayExpression(props.static) : t.nullLiteral(), // staticDescriptors\n ];\n\n let lastNonNullIndex = 0;\n for (let i = 0; i < args.length; i++) {\n if (!t.isNullLiteral(args[i])) lastNonNullIndex = i;\n }\n args = args.slice(0, lastNonNullIndex + 1);\n\n body.push(t.returnStatement(createClassHelper(args)));\n classState.pushedCreateClass = true;\n }\n }\n\n function wrapSuperCall(\n bareSuper: NodePath,\n superRef: t.Expression,\n thisRef: () => t.Identifier,\n body: NodePath,\n ) {\n const bareSuperNode = bareSuper.node;\n let call;\n\n if (assumptions.superIsCallableConstructor) {\n bareSuperNode.arguments.unshift(t.thisExpression());\n if (\n bareSuperNode.arguments.length === 2 &&\n t.isSpreadElement(bareSuperNode.arguments[1]) &&\n t.isIdentifier(bareSuperNode.arguments[1].argument, {\n name: \"arguments\",\n })\n ) {\n // special case single arguments spread\n bareSuperNode.arguments[1] = bareSuperNode.arguments[1].argument;\n bareSuperNode.callee = t.memberExpression(\n t.cloneNode(superRef),\n t.identifier(\"apply\"),\n );\n } else {\n bareSuperNode.callee = t.memberExpression(\n t.cloneNode(superRef),\n t.identifier(\"call\"),\n );\n }\n\n call = t.logicalExpression(\"||\", bareSuperNode, t.thisExpression());\n } else {\n const args: t.Expression[] = [\n t.thisExpression(),\n t.cloneNode(classState.classRef),\n ];\n if (bareSuperNode.arguments?.length) {\n const bareSuperNodeArguments = bareSuperNode.arguments as (\n | t.Expression\n | t.SpreadElement\n )[];\n\n /**\n * test262/test/language/expressions/super/call-spread-err-sngl-err-itr-get-get.js\n *\n * var iter = {};\n * Object.defineProperty(iter, Symbol.iterator, {\n * get: function() {\n * throw new Test262Error();\n * }\n * })\n * super(...iter);\n */\n\n if (\n bareSuperNodeArguments.length === 1 &&\n t.isSpreadElement(bareSuperNodeArguments[0]) &&\n t.isIdentifier(bareSuperNodeArguments[0].argument, {\n name: \"arguments\",\n })\n ) {\n args.push(bareSuperNodeArguments[0].argument);\n } else {\n args.push(t.arrayExpression(bareSuperNodeArguments));\n }\n }\n call = t.callExpression(addCallSuperHelper(classState.file), args);\n }\n\n if (\n bareSuper.parentPath.isExpressionStatement() &&\n bareSuper.parentPath.container === body.node.body &&\n body.node.body.length - 1 === bareSuper.parentPath.key\n ) {\n // this super call is the last statement in the body so we can just straight up\n // turn it into a return\n\n if (classState.superThises.length) {\n call = t.assignmentExpression(\"=\", thisRef(), call);\n }\n\n bareSuper.parentPath.replaceWith(t.returnStatement(call));\n } else {\n bareSuper.replaceWith(t.assignmentExpression(\"=\", thisRef(), call));\n }\n }\n\n function verifyConstructor() {\n if (!classState.isDerived) return;\n\n const path = classState.userConstructorPath;\n const body = path.get(\"body\");\n\n const constructorBody = path.get(\"body\");\n\n let maxGuaranteedSuperBeforeIndex = constructorBody.node.body.length;\n\n path.traverse(findThisesVisitor);\n\n let thisRef = function () {\n const ref = path.scope.generateDeclaredUidIdentifier(\"this\");\n maxGuaranteedSuperBeforeIndex++;\n thisRef = () => t.cloneNode(ref);\n return ref;\n };\n\n const buildAssertThisInitialized = function () {\n return t.callExpression(\n classState.file.addHelper(\"assertThisInitialized\"),\n [thisRef()],\n );\n };\n\n const bareSupers: NodePath[] = [];\n path.traverse(\n visitors.environmentVisitor({\n Super(path) {\n const { node, parentPath } = path;\n if (parentPath.isCallExpression({ callee: node })) {\n bareSupers.unshift(parentPath);\n }\n },\n }),\n );\n\n for (const bareSuper of bareSupers) {\n wrapSuperCall(bareSuper, classState.superName, thisRef, body);\n\n if (maxGuaranteedSuperBeforeIndex >= 0) {\n let lastParentPath: NodePath;\n bareSuper.find(function (parentPath) {\n // hit top so short circuit\n if (parentPath === constructorBody) {\n maxGuaranteedSuperBeforeIndex = Math.min(\n maxGuaranteedSuperBeforeIndex,\n lastParentPath.key as number,\n );\n return true;\n }\n\n const { type } = parentPath;\n switch (type) {\n case \"ExpressionStatement\":\n case \"SequenceExpression\":\n case \"AssignmentExpression\":\n case \"BinaryExpression\":\n case \"MemberExpression\":\n case \"CallExpression\":\n case \"NewExpression\":\n case \"VariableDeclarator\":\n case \"VariableDeclaration\":\n case \"BlockStatement\":\n case \"ArrayExpression\":\n case \"ObjectExpression\":\n case \"ObjectProperty\":\n case \"TemplateLiteral\":\n lastParentPath = parentPath;\n return false;\n default:\n if (\n (type === \"LogicalExpression\" &&\n parentPath.node.left === lastParentPath.node) ||\n (parentPath.isConditional() &&\n parentPath.node.test === lastParentPath.node) ||\n (type === \"OptionalCallExpression\" &&\n parentPath.node.callee === lastParentPath.node) ||\n (type === \"OptionalMemberExpression\" &&\n parentPath.node.object === lastParentPath.node)\n ) {\n lastParentPath = parentPath;\n return false;\n }\n }\n\n maxGuaranteedSuperBeforeIndex = -1;\n return true;\n });\n }\n }\n\n const guaranteedCalls = new Set();\n\n for (const thisPath of classState.superThises) {\n const { node, parentPath } = thisPath;\n if (parentPath.isMemberExpression({ object: node })) {\n thisPath.replaceWith(thisRef());\n continue;\n }\n\n let thisIndex: number;\n thisPath.find(function (parentPath) {\n if (parentPath.parentPath === constructorBody) {\n thisIndex = parentPath.key as number;\n return true;\n }\n });\n\n let exprPath: NodePath = thisPath.parentPath.isSequenceExpression()\n ? thisPath.parentPath\n : thisPath;\n if (\n exprPath.listKey === \"arguments\" &&\n (exprPath.parentPath.isCallExpression() ||\n exprPath.parentPath.isOptionalCallExpression())\n ) {\n exprPath = exprPath.parentPath;\n } else {\n exprPath = null;\n }\n\n if (\n (maxGuaranteedSuperBeforeIndex !== -1 &&\n thisIndex > maxGuaranteedSuperBeforeIndex) ||\n guaranteedCalls.has(exprPath)\n ) {\n thisPath.replaceWith(thisRef());\n } else {\n if (exprPath) {\n guaranteedCalls.add(exprPath);\n }\n thisPath.replaceWith(buildAssertThisInitialized());\n }\n }\n\n let wrapReturn;\n\n if (classState.isLoose) {\n wrapReturn = (returnArg: t.Expression | void) => {\n const thisExpr = buildAssertThisInitialized();\n return returnArg\n ? t.logicalExpression(\"||\", returnArg, thisExpr)\n : thisExpr;\n };\n } else {\n wrapReturn = (returnArg: t.Expression | undefined) => {\n const returnParams: t.Expression[] = [thisRef()];\n if (returnArg != null) {\n returnParams.push(returnArg);\n }\n return t.callExpression(\n classState.file.addHelper(\"possibleConstructorReturn\"),\n returnParams,\n );\n };\n }\n\n // if we have a return as the last node in the body then we've already caught that\n // return\n const bodyPaths = body.get(\"body\");\n const guaranteedSuperBeforeFinish =\n maxGuaranteedSuperBeforeIndex !== -1 &&\n maxGuaranteedSuperBeforeIndex < bodyPaths.length;\n if (!bodyPaths.length || !bodyPaths.pop().isReturnStatement()) {\n body.pushContainer(\n \"body\",\n t.returnStatement(\n guaranteedSuperBeforeFinish\n ? thisRef()\n : buildAssertThisInitialized(),\n ),\n );\n }\n\n for (const returnPath of classState.superReturns) {\n returnPath\n .get(\"argument\")\n .replaceWith(wrapReturn(returnPath.node.argument));\n }\n }\n\n /**\n * Push a method to its respective mutatorMap.\n */\n function pushMethod(node: t.ClassMethod, wrapped?: t.Expression) {\n if (node.kind === \"method\") {\n if (processMethod(node)) return;\n }\n\n const placement = node.static ? \"static\" : \"instance\";\n const methods = classState.methods[placement];\n\n const descKey = node.kind === \"method\" ? \"value\" : node.kind;\n const key =\n t.isNumericLiteral(node.key) || t.isBigIntLiteral(node.key)\n ? t.stringLiteral(String(node.key.value))\n : t.toComputedKey(node);\n methods.hasComputed = !t.isStringLiteral(key);\n\n const fn: t.Expression = wrapped ?? t.toExpression(node);\n\n let descriptor: Descriptor;\n if (\n !methods.hasComputed &&\n methods.map.has((key as t.StringLiteral).value)\n ) {\n descriptor = methods.map.get((key as t.StringLiteral).value);\n descriptor[descKey] = fn;\n\n if (descKey === \"value\") {\n descriptor.get = null;\n descriptor.set = null;\n } else {\n descriptor.value = null;\n }\n } else {\n descriptor = {\n key:\n // private name has been handled in class-properties transform\n key as t.Expression,\n [descKey]: fn,\n } as Descriptor;\n methods.list.push(descriptor);\n\n if (!methods.hasComputed) {\n methods.map.set((key as t.StringLiteral).value, descriptor);\n }\n }\n }\n\n function processMethod(node: t.ClassMethod) {\n if (assumptions.setClassMethods && !node.decorators) {\n // use assignments instead of define properties for loose classes\n let { classRef } = classState;\n if (!node.static) {\n insertProtoAliasOnce();\n classRef = classState.protoAlias;\n }\n const methodName = t.memberExpression(\n t.cloneNode(classRef),\n node.key,\n node.computed || t.isLiteral(node.key),\n );\n\n const func: t.Expression = t.functionExpression(\n // @ts-expect-error We actually set and id through .ensureFunctionName\n node.id,\n // @ts-expect-error Fixme: should throw when we see TSParameterProperty\n node.params,\n node.body,\n node.generator,\n node.async,\n );\n t.inherits(func, node);\n\n const expr = t.expressionStatement(\n t.assignmentExpression(\"=\", methodName, func),\n );\n t.inheritsComments(expr, node);\n classState.body.push(expr);\n return true;\n }\n\n return false;\n }\n\n function insertProtoAliasOnce() {\n if (classState.protoAlias === null) {\n setState({ protoAlias: classState.scope.generateUidIdentifier(\"proto\") });\n const classProto = t.memberExpression(\n classState.classRef,\n t.identifier(\"prototype\"),\n );\n const protoDeclaration = t.variableDeclaration(\"var\", [\n t.variableDeclarator(classState.protoAlias, classProto),\n ]);\n\n classState.body.push(protoDeclaration);\n }\n }\n\n /**\n * Replace the constructor body of our class.\n */\n function pushConstructor(\n superReturns: NodePath[],\n method: ClassConstructor,\n path: NodePath,\n ) {\n setState({\n userConstructorPath: path,\n userConstructor: method,\n hasConstructor: true,\n superReturns,\n });\n\n const { construct } = classState;\n\n t.inheritsComments(construct, method);\n\n // @ts-expect-error Fixme: should throw when we see TSParameterProperty\n construct.params = method.params;\n\n t.inherits(construct.body, method.body);\n construct.body.directives = method.body.directives;\n\n // we haven't pushed any descriptors yet\n // @ts-expect-error todo(flow->ts) maybe remove this block - properties from condition are not used anywhere else\n if (classState.hasInstanceDescriptors || classState.hasStaticDescriptors) {\n pushDescriptors();\n }\n\n pushInheritsToBody();\n }\n\n /**\n * Push inherits helper to body.\n */\n function pushInheritsToBody() {\n if (!classState.isDerived || classState.pushedInherits) return;\n\n classState.pushedInherits = true;\n\n // Unshift to ensure that the constructor inheritance is set up before\n // any properties can be assigned to the prototype.\n\n classState.body.unshift(\n t.expressionStatement(\n t.callExpression(\n classState.file.addHelper(\n classState.isLoose ? \"inheritsLoose\" : \"inherits\",\n ),\n [t.cloneNode(classState.classRef), t.cloneNode(classState.superName)],\n ),\n ),\n );\n }\n\n function extractDynamicKeys() {\n const { dynamicKeys, node, scope } = classState;\n\n for (const elem of node.body.body) {\n if (!t.isClassMethod(elem) || !elem.computed) continue;\n if (scope.isPure(elem.key, /* constants only*/ true)) continue;\n\n const id = scope.generateUidIdentifierBasedOnNode(elem.key);\n dynamicKeys.set(id.name, elem.key);\n\n elem.key = id;\n }\n }\n\n function setupClosureParamsArgs() {\n const { superName, dynamicKeys } = classState;\n const closureParams = [];\n const closureArgs = [];\n\n if (classState.isDerived) {\n let arg = t.cloneNode(superName);\n if (classState.extendsNative) {\n arg = t.callExpression(classState.file.addHelper(\"wrapNativeSuper\"), [\n arg,\n ]);\n annotateAsPure(arg);\n }\n\n const param =\n classState.scope.generateUidIdentifierBasedOnNode(superName);\n\n closureParams.push(param);\n closureArgs.push(arg);\n\n setState({ superName: t.cloneNode(param) });\n }\n\n for (const [name, value] of dynamicKeys) {\n closureParams.push(t.identifier(name));\n closureArgs.push(value);\n }\n\n return { closureParams, closureArgs };\n }\n\n function classTransformer(\n path: NodePath,\n file: File,\n builtinClasses: ReadonlySet,\n isLoose: boolean,\n ) {\n setState({\n parent: path.parent,\n scope: path.scope,\n node: path.node,\n path,\n file,\n isLoose,\n });\n\n setState({\n classId: classState.node.id,\n // this is the name of the binding that will **always** reference the class we've constructed\n classRef: classState.node.id\n ? t.identifier(classState.node.id.name)\n : classState.scope.generateUidIdentifier(\"class\"),\n superName: classState.node.superClass,\n isDerived: !!classState.node.superClass,\n constructorBody: t.blockStatement([]),\n });\n\n setState({\n extendsNative:\n t.isIdentifier(classState.superName) &&\n builtinClasses.has(classState.superName.name) &&\n !classState.scope.hasBinding(\n classState.superName.name,\n /* noGlobals */ true,\n ),\n });\n\n const { classRef, node, constructorBody } = classState;\n\n setState({\n construct: buildConstructor(classRef, constructorBody, node),\n });\n\n extractDynamicKeys();\n\n const { body } = classState;\n const { closureParams, closureArgs } = setupClosureParamsArgs();\n\n buildBody();\n\n // make sure this class isn't directly called (with A() instead new A())\n if (!assumptions.noClassCalls) {\n constructorBody.body.unshift(\n t.expressionStatement(\n t.callExpression(classState.file.addHelper(\"classCallCheck\"), [\n t.thisExpression(),\n t.cloneNode(classState.classRef),\n ]),\n ),\n );\n }\n\n const isStrict = path.isInStrictMode();\n let constructorOnly = body.length === 0;\n if (constructorOnly && !isStrict) {\n for (const param of classState.construct.params) {\n // It's illegal to put a use strict directive into the body of a function\n // with non-simple parameters for some reason. So, we have to use a strict\n // wrapper function.\n if (!t.isIdentifier(param)) {\n constructorOnly = false;\n break;\n }\n }\n }\n\n const directives = constructorOnly\n ? classState.construct.body.directives\n : [];\n if (!isStrict) {\n directives.push(t.directive(t.directiveLiteral(\"use strict\")));\n }\n\n if (constructorOnly) {\n // named class with only a constructor\n const expr = t.toExpression(classState.construct);\n return classState.isLoose ? expr : createClassHelper([expr]);\n }\n\n if (!classState.pushedCreateClass) {\n body.push(\n t.returnStatement(\n classState.isLoose\n ? t.cloneNode(classState.classRef)\n : createClassHelper([t.cloneNode(classState.classRef)]),\n ),\n );\n }\n\n body.unshift(classState.construct);\n\n const container = t.arrowFunctionExpression(\n closureParams,\n t.blockStatement(body, directives),\n );\n return t.callExpression(container, closureArgs);\n }\n\n return classTransformer(path, file, builtinClasses, isLoose);\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/package.json b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/package.json deleted file mode 100644 index 9fd14639..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@babel/plugin-transform-classes", - "version": "7.28.4", - "description": "Compile ES2015 classes to ES5", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel.git", - "directory": "packages/babel-plugin-transform-classes" - }, - "homepage": "https://babel.dev/docs/en/next/babel-plugin-transform-classes", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "./lib/index.js", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" - }, - "keywords": [ - "babel-plugin" - ], - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/helper-plugin-test-runner": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "author": "The Babel Team (https://babel.dev/team)", - "type": "commonjs" -} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/LICENSE b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/LICENSE deleted file mode 100644 index f31575ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/README.md b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/README.md deleted file mode 100644 index 0d98d92c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# @babel/plugin-transform-nullish-coalescing-operator - -> Remove nullish coalescing operator - -See our website [@babel/plugin-transform-nullish-coalescing-operator](https://babeljs.io/docs/babel-plugin-transform-nullish-coalescing-operator) for more information. - -## Install - -Using npm: - -```sh -npm install --save-dev @babel/plugin-transform-nullish-coalescing-operator -``` - -or using yarn: - -```sh -yarn add @babel/plugin-transform-nullish-coalescing-operator --dev -``` diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js deleted file mode 100644 index 738b6e5a..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -var _helperPluginUtils = require("@babel/helper-plugin-utils"); -var _core = require("@babel/core"); -var _default = exports.default = (0, _helperPluginUtils.declare)((api, { - loose = false -}) => { - var _api$assumption, _api$assumption2; - api.assertVersion("^7.0.0-0 || >8.0.0-alpha <8.0.0-beta"); - const noDocumentAll = (_api$assumption = api.assumption("noDocumentAll")) != null ? _api$assumption : loose; - const pureGetters = (_api$assumption2 = api.assumption("pureGetters")) != null ? _api$assumption2 : false; - return { - name: "transform-nullish-coalescing-operator", - manipulateOptions: (_, parser) => parser.plugins.push("nullishCoalescingOperator"), - visitor: { - LogicalExpression(path) { - const { - node, - scope - } = path; - if (node.operator !== "??") { - return; - } - let ref; - let assignment; - if (pureGetters && scope.path.isPattern() && _core.types.isMemberExpression(node.left) && !node.left.computed && _core.types.isIdentifier(node.left.object) && _core.types.isIdentifier(node.left.property) || _core.types.isIdentifier(node.left) && (pureGetters || scope.hasBinding(node.left.name))) { - ref = node.left; - assignment = _core.types.cloneNode(node.left); - } else if (scope.path.isPattern()) { - path.replaceWith(_core.template.statement.ast`(() => ${path.node})()`); - return; - } else { - ref = scope.generateUidIdentifierBasedOnNode(node.left); - scope.push({ - id: _core.types.cloneNode(ref) - }); - assignment = _core.types.assignmentExpression("=", ref, node.left); - } - path.replaceWith(_core.types.conditionalExpression(noDocumentAll ? _core.types.binaryExpression("!=", assignment, _core.types.nullLiteral()) : _core.types.logicalExpression("&&", _core.types.binaryExpression("!==", assignment, _core.types.nullLiteral()), _core.types.binaryExpression("!==", _core.types.cloneNode(ref), scope.buildUndefinedNode())), _core.types.cloneNode(ref), node.right)); - } - } - }; -}); - -//# sourceMappingURL=index.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js.map deleted file mode 100644 index fe1ebb16..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_helperPluginUtils","require","_core","_default","exports","default","declare","api","loose","_api$assumption","_api$assumption2","assertVersion","noDocumentAll","assumption","pureGetters","name","manipulateOptions","_","parser","plugins","push","visitor","LogicalExpression","path","node","scope","operator","ref","assignment","isPattern","t","isMemberExpression","left","computed","isIdentifier","object","property","hasBinding","cloneNode","replaceWith","template","statement","ast","generateUidIdentifierBasedOnNode","id","assignmentExpression","conditionalExpression","binaryExpression","nullLiteral","logicalExpression","buildUndefinedNode","right"],"sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { types as t, template } from \"@babel/core\";\n\nexport interface Options {\n loose?: boolean;\n}\n\nexport default declare((api, { loose = false }: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n const noDocumentAll = api.assumption(\"noDocumentAll\") ?? loose;\n const pureGetters = api.assumption(\"pureGetters\") ?? false;\n\n return {\n name: \"transform-nullish-coalescing-operator\",\n manipulateOptions: process.env.BABEL_8_BREAKING\n ? undefined\n : (_, parser) => parser.plugins.push(\"nullishCoalescingOperator\"),\n\n visitor: {\n LogicalExpression(path) {\n const { node, scope } = path;\n if (node.operator !== \"??\") {\n return;\n }\n\n let ref;\n let assignment;\n // skip creating extra reference when `left` is pure\n if (\n (pureGetters &&\n scope.path.isPattern() &&\n t.isMemberExpression(node.left) &&\n !node.left.computed &&\n t.isIdentifier(node.left.object) &&\n t.isIdentifier(node.left.property)) ||\n (t.isIdentifier(node.left) &&\n (pureGetters ||\n // globalThis\n scope.hasBinding(node.left.name)))\n ) {\n ref = node.left;\n assignment = t.cloneNode(node.left);\n } else if (scope.path.isPattern()) {\n // Replace `function (a, x = a.b ?? c) {}` to `function (a, x = (() => a.b ?? c)() ){}`\n // so the temporary variable can be injected in correct scope\n path.replaceWith(template.statement.ast`(() => ${path.node})()`);\n // The injected nullish expression will be queued and eventually transformed when visited\n return;\n } else {\n ref = scope.generateUidIdentifierBasedOnNode(node.left);\n scope.push({ id: t.cloneNode(ref) });\n assignment = t.assignmentExpression(\"=\", ref, node.left);\n }\n\n path.replaceWith(\n t.conditionalExpression(\n // We cannot use `!= null` in spec mode because\n // `document.all == null` and `document.all` is not \"nullish\".\n noDocumentAll\n ? t.binaryExpression(\"!=\", assignment, t.nullLiteral())\n : t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"!==\", assignment, t.nullLiteral()),\n t.binaryExpression(\n \"!==\",\n t.cloneNode(ref),\n scope.buildUndefinedNode(),\n ),\n ),\n t.cloneNode(ref),\n node.right,\n ),\n );\n },\n },\n };\n});\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/package.json b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/package.json deleted file mode 100644 index ecdd656e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@babel/plugin-transform-nullish-coalescing-operator", - "version": "7.27.1", - "description": "Remove nullish coalescing operator", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel.git", - "directory": "packages/babel-plugin-transform-nullish-coalescing-operator" - }, - "homepage": "https://babel.dev/docs/en/next/babel-plugin-transform-nullish-coalescing-operator", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "./lib/index.js", - "keywords": [ - "babel-plugin" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "devDependencies": { - "@babel/core": "^7.27.1", - "@babel/helper-plugin-test-runner": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "author": "The Babel Team (https://babel.dev/team)", - "type": "commonjs" -} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/LICENSE b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/LICENSE deleted file mode 100644 index f31575ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/README.md b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/README.md deleted file mode 100644 index 41cdc2b6..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# @babel/plugin-transform-optional-chaining - -> Transform optional chaining operators into a series of nil checks - -See our website [@babel/plugin-transform-optional-chaining](https://babeljs.io/docs/babel-plugin-transform-optional-chaining) for more information. - -## Install - -Using npm: - -```sh -npm install --save-dev @babel/plugin-transform-optional-chaining -``` - -or using yarn: - -```sh -yarn add @babel/plugin-transform-optional-chaining --dev -``` diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js deleted file mode 100644 index d8ee7ddb..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js +++ /dev/null @@ -1,243 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var helperPluginUtils = require('@babel/helper-plugin-utils'); -var core = require('@babel/core'); -var helperSkipTransparentExpressionWrappers = require('@babel/helper-skip-transparent-expression-wrappers'); - -function willPathCastToBoolean(path) { - const maybeWrapped = findOutermostTransparentParent(path); - const { - node, - parentPath - } = maybeWrapped; - if (parentPath.isLogicalExpression()) { - const { - operator, - right - } = parentPath.node; - if (operator === "&&" || operator === "||" || operator === "??" && node === right) { - return willPathCastToBoolean(parentPath); - } - } - if (parentPath.isSequenceExpression()) { - const { - expressions - } = parentPath.node; - if (expressions[expressions.length - 1] === node) { - return willPathCastToBoolean(parentPath); - } else { - return true; - } - } - return parentPath.isConditional({ - test: node - }) || parentPath.isUnaryExpression({ - operator: "!" - }) || parentPath.isLoop({ - test: node - }); -} -function findOutermostTransparentParent(path) { - let maybeWrapped = path; - path.findParent(p => { - if (!helperSkipTransparentExpressionWrappers.isTransparentExprWrapper(p.node)) return true; - maybeWrapped = p; - }); - return maybeWrapped; -} - -const last = arr => arr[arr.length - 1]; -function isSimpleMemberExpression(expression) { - expression = helperSkipTransparentExpressionWrappers.skipTransparentExprWrapperNodes(expression); - return core.types.isIdentifier(expression) || core.types.isSuper(expression) || core.types.isMemberExpression(expression) && !expression.computed && isSimpleMemberExpression(expression.object); -} -function needsMemoize(path) { - let optionalPath = path; - const { - scope - } = path; - while (optionalPath.isOptionalMemberExpression() || optionalPath.isOptionalCallExpression()) { - const { - node - } = optionalPath; - const childPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.isOptionalMemberExpression() ? optionalPath.get("object") : optionalPath.get("callee")); - if (node.optional) { - return !scope.isStatic(childPath.node); - } - optionalPath = childPath; - } -} -const NULLISH_CHECK = core.template.expression(`%%check%% === null || %%ref%% === void 0`); -const NULLISH_CHECK_NO_DDA = core.template.expression(`%%check%% == null`); -const NULLISH_CHECK_NEG = core.template.expression(`%%check%% !== null && %%ref%% !== void 0`); -const NULLISH_CHECK_NO_DDA_NEG = core.template.expression(`%%check%% != null`); -function transformOptionalChain(path, { - pureGetters, - noDocumentAll -}, replacementPath, ifNullish, wrapLast) { - const { - scope - } = path; - if (scope.path.isPattern() && needsMemoize(path)) { - replacementPath.replaceWith(core.template.expression.ast`(() => ${replacementPath.node})()`); - return; - } - const optionals = []; - let optionalPath = path; - while (optionalPath.isOptionalMemberExpression() || optionalPath.isOptionalCallExpression()) { - const { - node - } = optionalPath; - if (node.optional) { - optionals.push(node); - } - if (optionalPath.isOptionalMemberExpression()) { - optionalPath.node.type = "MemberExpression"; - optionalPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.get("object")); - } else if (optionalPath.isOptionalCallExpression()) { - optionalPath.node.type = "CallExpression"; - optionalPath = helperSkipTransparentExpressionWrappers.skipTransparentExprWrappers(optionalPath.get("callee")); - } - } - if (optionals.length === 0) { - return; - } - const checks = []; - let tmpVar; - for (let i = optionals.length - 1; i >= 0; i--) { - const node = optionals[i]; - const isCall = core.types.isCallExpression(node); - const chainWithTypes = isCall ? node.callee : node.object; - const chain = helperSkipTransparentExpressionWrappers.skipTransparentExprWrapperNodes(chainWithTypes); - let ref; - let check; - if (isCall && core.types.isIdentifier(chain, { - name: "eval" - })) { - check = ref = chain; - node.callee = core.types.sequenceExpression([core.types.numericLiteral(0), ref]); - } else if (pureGetters && isCall && isSimpleMemberExpression(chain)) { - check = ref = node.callee; - } else if (scope.isStatic(chain)) { - check = ref = chainWithTypes; - } else { - if (!tmpVar || isCall) { - tmpVar = scope.generateUidIdentifierBasedOnNode(chain); - scope.push({ - id: core.types.cloneNode(tmpVar) - }); - } - ref = tmpVar; - check = core.types.assignmentExpression("=", core.types.cloneNode(tmpVar), chainWithTypes); - if (isCall) { - node.callee = ref; - } else { - node.object = ref; - } - } - if (isCall && core.types.isMemberExpression(chain)) { - if (pureGetters && isSimpleMemberExpression(chain)) { - node.callee = chainWithTypes; - } else { - const { - object - } = chain; - let context; - if (core.types.isSuper(object)) { - context = core.types.thisExpression(); - } else { - const memoized = scope.maybeGenerateMemoised(object); - if (memoized) { - context = memoized; - chain.object = core.types.assignmentExpression("=", memoized, object); - } else { - context = object; - } - } - node.arguments.unshift(core.types.cloneNode(context)); - node.callee = core.types.memberExpression(node.callee, core.types.identifier("call")); - } - } - const data = { - check: core.types.cloneNode(check), - ref: core.types.cloneNode(ref) - }; - Object.defineProperty(data, "ref", { - enumerable: false - }); - checks.push(data); - } - let result = replacementPath.node; - if (wrapLast) result = wrapLast(result); - const ifNullishBoolean = core.types.isBooleanLiteral(ifNullish); - const ifNullishFalse = ifNullishBoolean && ifNullish.value === false; - const ifNullishVoid = !ifNullishBoolean && core.types.isUnaryExpression(ifNullish, { - operator: "void" - }); - const isEvaluationValueIgnored = core.types.isExpressionStatement(replacementPath.parent) && !replacementPath.isCompletionRecord() || core.types.isSequenceExpression(replacementPath.parent) && last(replacementPath.parent.expressions) !== replacementPath.node; - const tpl = ifNullishFalse ? noDocumentAll ? NULLISH_CHECK_NO_DDA_NEG : NULLISH_CHECK_NEG : noDocumentAll ? NULLISH_CHECK_NO_DDA : NULLISH_CHECK; - const logicalOp = ifNullishFalse ? "&&" : "||"; - const check = checks.map(tpl).reduce((expr, check) => core.types.logicalExpression(logicalOp, expr, check)); - replacementPath.replaceWith(ifNullishBoolean || ifNullishVoid && isEvaluationValueIgnored ? core.types.logicalExpression(logicalOp, check, result) : core.types.conditionalExpression(check, ifNullish, result)); -} -function transform(path, assumptions) { - const { - scope - } = path; - const maybeWrapped = findOutermostTransparentParent(path); - const { - parentPath - } = maybeWrapped; - if (parentPath.isUnaryExpression({ - operator: "delete" - })) { - transformOptionalChain(path, assumptions, parentPath, core.types.booleanLiteral(true)); - } else { - let wrapLast; - if (parentPath.isCallExpression({ - callee: maybeWrapped.node - }) && path.isOptionalMemberExpression()) { - wrapLast = replacement => { - const object = helperSkipTransparentExpressionWrappers.skipTransparentExprWrapperNodes(replacement.object); - let baseRef; - if (!assumptions.pureGetters || !isSimpleMemberExpression(object)) { - baseRef = scope.maybeGenerateMemoised(object); - if (baseRef) { - replacement.object = core.types.assignmentExpression("=", baseRef, object); - } - } - return core.types.callExpression(core.types.memberExpression(replacement, core.types.identifier("bind")), [core.types.cloneNode(baseRef != null ? baseRef : object)]); - }; - } - transformOptionalChain(path, assumptions, path, willPathCastToBoolean(maybeWrapped) ? core.types.booleanLiteral(false) : scope.buildUndefinedNode(), wrapLast); - } -} - -var index = helperPluginUtils.declare((api, options) => { - var _api$assumption, _api$assumption2; - api.assertVersion("^7.0.0-0 || >8.0.0-alpha <8.0.0-beta"); - const { - loose = false - } = options; - const noDocumentAll = (_api$assumption = api.assumption("noDocumentAll")) != null ? _api$assumption : loose; - const pureGetters = (_api$assumption2 = api.assumption("pureGetters")) != null ? _api$assumption2 : loose; - return { - name: "transform-optional-chaining", - manipulateOptions: (_, parser) => parser.plugins.push("optionalChaining"), - visitor: { - "OptionalCallExpression|OptionalMemberExpression"(path) { - transform(path, { - noDocumentAll, - pureGetters - }); - } - } - }; -}); - -exports.default = index; -exports.transform = transform; -exports.transformOptionalChain = transformOptionalChain; -//# sourceMappingURL=index.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js.map deleted file mode 100644 index 74386d7e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sources":["../src/util.ts","../src/transform.ts","../src/index.ts"],"sourcesContent":["import type { NodePath } from \"@babel/core\";\nimport { isTransparentExprWrapper } from \"@babel/helper-skip-transparent-expression-wrappers\";\n/**\n * Test if a NodePath will be cast to boolean when evaluated.\n * It respects transparent expression wrappers defined in\n * \"@babel/helper-skip-transparent-expression-wrappers\"\n *\n * @example\n * // returns true\n * const nodePathADotB = NodePath(\"if (a.b) {}\").get(\"test\"); // a.b\n * willPathCastToBoolean(nodePathADotB)\n * @example\n * // returns false\n * willPathCastToBoolean(NodePath(\"a.b\"))\n * @param {NodePath} path\n * @returns {boolean}\n */\nexport function willPathCastToBoolean(path: NodePath): boolean {\n const maybeWrapped = findOutermostTransparentParent(path);\n const { node, parentPath } = maybeWrapped;\n if (parentPath.isLogicalExpression()) {\n const { operator, right } = parentPath.node;\n if (\n operator === \"&&\" ||\n operator === \"||\" ||\n (operator === \"??\" && node === right)\n ) {\n return willPathCastToBoolean(parentPath);\n }\n }\n if (parentPath.isSequenceExpression()) {\n const { expressions } = parentPath.node;\n if (expressions[expressions.length - 1] === node) {\n return willPathCastToBoolean(parentPath);\n } else {\n // if it is in the middle of a sequence expression, we don't\n // care the return value so just cast to boolean for smaller\n // output\n return true;\n }\n }\n return (\n parentPath.isConditional({ test: node }) ||\n parentPath.isUnaryExpression({ operator: \"!\" }) ||\n parentPath.isLoop({ test: node })\n );\n}\n\n/**\n * Return the outermost transparent expression wrapper of a given path,\n * otherwise returns path itself.\n * @example\n * const nodePathADotB = NodePath(\"(a.b as any)\").get(\"expression\"); // a.b\n * // returns NodePath(\"(a.b as any)\")\n * findOutermostTransparentParent(nodePathADotB);\n * @param {NodePath} path\n * @returns {NodePath}\n */\nexport function findOutermostTransparentParent(path: NodePath): NodePath {\n let maybeWrapped = path;\n path.findParent(p => {\n if (!isTransparentExprWrapper(p.node)) return true;\n maybeWrapped = p;\n });\n return maybeWrapped;\n}\n","import { types as t, template, type NodePath } from \"@babel/core\";\nimport {\n skipTransparentExprWrapperNodes,\n skipTransparentExprWrappers,\n} from \"@babel/helper-skip-transparent-expression-wrappers\";\nimport {\n willPathCastToBoolean,\n findOutermostTransparentParent,\n} from \"./util.ts\";\n\n// TODO(Babel 9): Use .at(-1)\nconst last = (arr: T[]) => arr[arr.length - 1];\n\nfunction isSimpleMemberExpression(\n expression: t.Expression | t.Super,\n): expression is t.Identifier | t.Super | t.MemberExpression {\n expression = skipTransparentExprWrapperNodes(expression);\n return (\n t.isIdentifier(expression) ||\n t.isSuper(expression) ||\n (t.isMemberExpression(expression) &&\n !expression.computed &&\n isSimpleMemberExpression(expression.object))\n );\n}\n\n/**\n * Test if a given optional chain `path` needs to be memoized\n * @param {NodePath} path\n * @returns {boolean}\n */\nfunction needsMemoize(\n path: NodePath,\n) {\n let optionalPath: NodePath = path;\n const { scope } = path;\n while (\n optionalPath.isOptionalMemberExpression() ||\n optionalPath.isOptionalCallExpression()\n ) {\n const { node } = optionalPath;\n const childPath = skipTransparentExprWrappers(\n optionalPath.isOptionalMemberExpression()\n ? optionalPath.get(\"object\")\n : optionalPath.get(\"callee\"),\n );\n if (node.optional) {\n return !scope.isStatic(childPath.node);\n }\n\n optionalPath = childPath;\n }\n}\n\nconst NULLISH_CHECK = template.expression(\n `%%check%% === null || %%ref%% === void 0`,\n);\nconst NULLISH_CHECK_NO_DDA = template.expression(`%%check%% == null`);\nconst NULLISH_CHECK_NEG = template.expression(\n `%%check%% !== null && %%ref%% !== void 0`,\n);\nconst NULLISH_CHECK_NO_DDA_NEG = template.expression(`%%check%% != null`);\n\ninterface OptionalChainAssumptions {\n pureGetters: boolean;\n noDocumentAll: boolean;\n}\n\nexport function transformOptionalChain(\n path: NodePath,\n { pureGetters, noDocumentAll }: OptionalChainAssumptions,\n replacementPath: NodePath,\n ifNullish: t.Expression,\n wrapLast?: (value: t.Expression) => t.Expression,\n) {\n const { scope } = path;\n\n // Replace `function (a, x = a.b?.c) {}` to `function (a, x = (() => a.b?.c)() ){}`\n // so the temporary variable can be injected in correct scope\n if (scope.path.isPattern() && needsMemoize(path)) {\n replacementPath.replaceWith(\n template.expression.ast`(() => ${replacementPath.node})()`,\n );\n // The injected optional chain will be queued and eventually transformed when visited\n return;\n }\n\n const optionals = [];\n\n let optionalPath = path;\n while (\n optionalPath.isOptionalMemberExpression() ||\n optionalPath.isOptionalCallExpression()\n ) {\n const { node } = optionalPath;\n if (node.optional) {\n optionals.push(node);\n }\n if (optionalPath.isOptionalMemberExpression()) {\n // @ts-expect-error todo(flow->ts) avoid changing more type\n optionalPath.node.type = \"MemberExpression\";\n // @ts-expect-error todo(flow->ts)\n optionalPath = skipTransparentExprWrappers(optionalPath.get(\"object\"));\n } else if (optionalPath.isOptionalCallExpression()) {\n // @ts-expect-error todo(flow->ts) avoid changing more type\n optionalPath.node.type = \"CallExpression\";\n // @ts-expect-error todo(flow->ts)\n optionalPath = skipTransparentExprWrappers(optionalPath.get(\"callee\"));\n }\n }\n\n if (optionals.length === 0) {\n // Malformed AST: there was an OptionalMemberExpression node\n // with no actual optional elements.\n return;\n }\n\n const checks = [];\n\n let tmpVar;\n\n for (let i = optionals.length - 1; i >= 0; i--) {\n const node = optionals[i] as unknown as\n | t.MemberExpression\n | t.CallExpression;\n\n const isCall = t.isCallExpression(node);\n\n const chainWithTypes = isCall\n ? // V8 intrinsics must not be an optional call\n (node.callee as t.Expression)\n : node.object;\n const chain = skipTransparentExprWrapperNodes(chainWithTypes);\n\n let ref;\n let check;\n if (isCall && t.isIdentifier(chain, { name: \"eval\" })) {\n check = ref = chain;\n // `eval?.()` is an indirect eval call transformed to `(0,eval)()`\n node.callee = t.sequenceExpression([t.numericLiteral(0), ref]);\n } else if (pureGetters && isCall && isSimpleMemberExpression(chain)) {\n // If we assume getters are pure (avoiding a Function#call) and we are at the call,\n // we can avoid a needless memoize. We only do this if the callee is a simple member\n // expression, to avoid multiple calls to nested call expressions.\n check = ref = node.callee;\n } else if (scope.isStatic(chain)) {\n check = ref = chainWithTypes;\n } else {\n // We cannot reuse the tmpVar for calls, because we need to\n // store both the method and the receiver.\n if (!tmpVar || isCall) {\n tmpVar = scope.generateUidIdentifierBasedOnNode(chain);\n scope.push({ id: t.cloneNode(tmpVar) });\n }\n ref = tmpVar;\n check = t.assignmentExpression(\n \"=\",\n t.cloneNode(tmpVar),\n // Here `chainWithTypes` MUST NOT be cloned because it could be\n // updated when generating the memoised context of a call\n // expression. It must be an Expression when `ref` is an identifier\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n chainWithTypes as t.Expression,\n );\n\n if (isCall) {\n node.callee = ref;\n } else {\n node.object = ref;\n }\n }\n\n // Ensure call expressions have the proper `this`\n // `foo.bar()` has context `foo`.\n if (isCall && t.isMemberExpression(chain)) {\n if (pureGetters && isSimpleMemberExpression(chain)) {\n // To avoid a Function#call, we can instead re-grab the property from the context object.\n // `a.?b.?()` translates roughly to `_a.b != null && _a.b()`\n node.callee = chainWithTypes;\n } else {\n // Otherwise, we need to memoize the context object, and change the call into a Function#call.\n // `a.?b.?()` translates roughly to `(_b = _a.b) != null && _b.call(_a)`\n const { object } = chain;\n let context: t.Expression;\n if (t.isSuper(object)) {\n context = t.thisExpression();\n } else {\n const memoized = scope.maybeGenerateMemoised(object);\n if (memoized) {\n context = memoized;\n chain.object = t.assignmentExpression(\"=\", memoized, object);\n } else {\n context = object;\n }\n }\n\n node.arguments.unshift(t.cloneNode(context));\n // @ts-expect-error node.callee can not be an V8IntrinsicIdentifier: V8 intrinsic is disallowed in optional chain\n node.callee = t.memberExpression(node.callee, t.identifier(\"call\"));\n }\n }\n\n const data = { check: t.cloneNode(check), ref: t.cloneNode(ref) };\n // We make `ref` non-enumerable, so that @babel/template doesn't throw\n // in the noDocumentAll template if it's not used.\n Object.defineProperty(data, \"ref\", { enumerable: false });\n checks.push(data);\n }\n\n let result = replacementPath.node;\n if (wrapLast) result = wrapLast(result);\n\n const ifNullishBoolean = t.isBooleanLiteral(ifNullish);\n const ifNullishFalse = ifNullishBoolean && ifNullish.value === false;\n const ifNullishVoid =\n !ifNullishBoolean && t.isUnaryExpression(ifNullish, { operator: \"void\" });\n\n const isEvaluationValueIgnored =\n (t.isExpressionStatement(replacementPath.parent) &&\n !replacementPath.isCompletionRecord()) ||\n (t.isSequenceExpression(replacementPath.parent) &&\n last(replacementPath.parent.expressions) !== replacementPath.node);\n\n // prettier-ignore\n const tpl = ifNullishFalse\n ? (noDocumentAll ? NULLISH_CHECK_NO_DDA_NEG : NULLISH_CHECK_NEG)\n : (noDocumentAll ? NULLISH_CHECK_NO_DDA : NULLISH_CHECK);\n const logicalOp = ifNullishFalse ? \"&&\" : \"||\";\n\n const check = checks\n .map(tpl)\n .reduce((expr, check) => t.logicalExpression(logicalOp, expr, check));\n\n replacementPath.replaceWith(\n ifNullishBoolean || (ifNullishVoid && isEvaluationValueIgnored)\n ? t.logicalExpression(logicalOp, check, result)\n : t.conditionalExpression(check, ifNullish, result),\n );\n}\n\nexport function transform(\n path: NodePath,\n assumptions: OptionalChainAssumptions,\n) {\n const { scope } = path;\n\n // maybeWrapped points to the outermost transparent expression wrapper\n // or the path itself\n const maybeWrapped = findOutermostTransparentParent(path);\n const { parentPath } = maybeWrapped;\n\n if (parentPath.isUnaryExpression({ operator: \"delete\" })) {\n transformOptionalChain(\n path,\n assumptions,\n parentPath,\n t.booleanLiteral(true),\n );\n } else {\n let wrapLast;\n if (\n parentPath.isCallExpression({ callee: maybeWrapped.node }) &&\n // note that the first condition must implies that `path.optional` is `true`,\n // otherwise the parentPath should be an OptionalCallExpression\n path.isOptionalMemberExpression()\n ) {\n // Ensure (a?.b)() has proper `this`\n wrapLast = (replacement: t.MemberExpression) => {\n // `(a?.b)()` to `(a == null ? undefined : a.b.bind(a))()`\n // object must not be Super as super?.foo is invalid\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const object = skipTransparentExprWrapperNodes(\n replacement.object,\n ) as t.Expression;\n let baseRef: t.Expression;\n if (!assumptions.pureGetters || !isSimpleMemberExpression(object)) {\n // memoize the context object when getters are not always pure\n // or the object is not a simple member expression\n // `(a?.b.c)()` to `(a == null ? undefined : (_a$b = a.b).c.bind(_a$b))()`\n baseRef = scope.maybeGenerateMemoised(object);\n if (baseRef) {\n replacement.object = t.assignmentExpression(\"=\", baseRef, object);\n }\n }\n return t.callExpression(\n t.memberExpression(replacement, t.identifier(\"bind\")),\n [t.cloneNode(baseRef ?? object)],\n );\n };\n }\n\n transformOptionalChain(\n path,\n assumptions,\n path,\n willPathCastToBoolean(maybeWrapped)\n ? t.booleanLiteral(false)\n : scope.buildUndefinedNode(),\n wrapLast,\n );\n }\n}\n","import { declare } from \"@babel/helper-plugin-utils\";\nimport { transform, transformOptionalChain } from \"./transform.ts\";\nimport type { NodePath, types as t } from \"@babel/core\";\n\nexport interface Options {\n loose?: boolean;\n}\nexport default declare((api, options: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n\n const { loose = false } = options;\n const noDocumentAll = api.assumption(\"noDocumentAll\") ?? loose;\n const pureGetters = api.assumption(\"pureGetters\") ?? loose;\n\n return {\n name: \"transform-optional-chaining\",\n manipulateOptions: process.env.BABEL_8_BREAKING\n ? undefined\n : (_, parser) => parser.plugins.push(\"optionalChaining\"),\n\n visitor: {\n \"OptionalCallExpression|OptionalMemberExpression\"(\n path: NodePath,\n ) {\n transform(path, { noDocumentAll, pureGetters });\n },\n },\n };\n});\n\nexport { transform, transformOptionalChain };\n"],"names":["willPathCastToBoolean","path","maybeWrapped","findOutermostTransparentParent","node","parentPath","isLogicalExpression","operator","right","isSequenceExpression","expressions","length","isConditional","test","isUnaryExpression","isLoop","findParent","p","isTransparentExprWrapper","last","arr","isSimpleMemberExpression","expression","skipTransparentExprWrapperNodes","t","isIdentifier","isSuper","isMemberExpression","computed","object","needsMemoize","optionalPath","scope","isOptionalMemberExpression","isOptionalCallExpression","childPath","skipTransparentExprWrappers","get","optional","isStatic","NULLISH_CHECK","template","NULLISH_CHECK_NO_DDA","NULLISH_CHECK_NEG","NULLISH_CHECK_NO_DDA_NEG","transformOptionalChain","pureGetters","noDocumentAll","replacementPath","ifNullish","wrapLast","isPattern","replaceWith","ast","optionals","push","type","checks","tmpVar","i","isCall","isCallExpression","chainWithTypes","callee","chain","ref","check","name","sequenceExpression","numericLiteral","generateUidIdentifierBasedOnNode","id","cloneNode","assignmentExpression","context","thisExpression","memoized","maybeGenerateMemoised","arguments","unshift","memberExpression","identifier","data","Object","defineProperty","enumerable","result","ifNullishBoolean","isBooleanLiteral","ifNullishFalse","value","ifNullishVoid","isEvaluationValueIgnored","isExpressionStatement","parent","isCompletionRecord","tpl","logicalOp","map","reduce","expr","logicalExpression","conditionalExpression","transform","assumptions","booleanLiteral","replacement","baseRef","callExpression","buildUndefinedNode","declare","api","options","_api$assumption","_api$assumption2","assertVersion","loose","assumption","manipulateOptions","_","parser","plugins","visitor","OptionalCallExpression|OptionalMemberExpression"],"mappings":";;;;;;;;AAiBO,SAASA,qBAAqBA,CAACC,IAAc,EAAW;AAC7D,EAAA,MAAMC,YAAY,GAAGC,8BAA8B,CAACF,IAAI,CAAC,CAAA;EACzD,MAAM;IAAEG,IAAI;AAAEC,IAAAA,UAAAA;AAAW,GAAC,GAAGH,YAAY,CAAA;AACzC,EAAA,IAAIG,UAAU,CAACC,mBAAmB,EAAE,EAAE;IACpC,MAAM;MAAEC,QAAQ;AAAEC,MAAAA,KAAAA;KAAO,GAAGH,UAAU,CAACD,IAAI,CAAA;AAC3C,IAAA,IACEG,QAAQ,KAAK,IAAI,IACjBA,QAAQ,KAAK,IAAI,IAChBA,QAAQ,KAAK,IAAI,IAAIH,IAAI,KAAKI,KAAM,EACrC;MACA,OAAOR,qBAAqB,CAACK,UAAU,CAAC,CAAA;AAC1C,KAAA;AACF,GAAA;AACA,EAAA,IAAIA,UAAU,CAACI,oBAAoB,EAAE,EAAE;IACrC,MAAM;AAAEC,MAAAA,WAAAA;KAAa,GAAGL,UAAU,CAACD,IAAI,CAAA;IACvC,IAAIM,WAAW,CAACA,WAAW,CAACC,MAAM,GAAG,CAAC,CAAC,KAAKP,IAAI,EAAE;MAChD,OAAOJ,qBAAqB,CAACK,UAAU,CAAC,CAAA;AAC1C,KAAC,MAAM;AAIL,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACF,GAAA;EACA,OACEA,UAAU,CAACO,aAAa,CAAC;AAAEC,IAAAA,IAAI,EAAET,IAAAA;AAAK,GAAC,CAAC,IACxCC,UAAU,CAACS,iBAAiB,CAAC;AAAEP,IAAAA,QAAQ,EAAE,GAAA;AAAI,GAAC,CAAC,IAC/CF,UAAU,CAACU,MAAM,CAAC;AAAEF,IAAAA,IAAI,EAAET,IAAAA;AAAK,GAAC,CAAC,CAAA;AAErC,CAAA;AAYO,SAASD,8BAA8BA,CAACF,IAAc,EAAY;EACvE,IAAIC,YAAY,GAAGD,IAAI,CAAA;AACvBA,EAAAA,IAAI,CAACe,UAAU,CAACC,CAAC,IAAI;IACnB,IAAI,CAACC,gEAAwB,CAACD,CAAC,CAACb,IAAI,CAAC,EAAE,OAAO,IAAI,CAAA;AAClDF,IAAAA,YAAY,GAAGe,CAAC,CAAA;AAClB,GAAC,CAAC,CAAA;AACF,EAAA,OAAOf,YAAY,CAAA;AACrB;;ACtDA,MAAMiB,IAAI,GAAOC,GAAQ,IAAKA,GAAG,CAACA,GAAG,CAACT,MAAM,GAAG,CAAC,CAAC,CAAA;AAEjD,SAASU,wBAAwBA,CAC/BC,UAAkC,EACyB;AAC3DA,EAAAA,UAAU,GAAGC,uEAA+B,CAACD,UAAU,CAAC,CAAA;AACxD,EAAA,OACEE,UAAC,CAACC,YAAY,CAACH,UAAU,CAAC,IAC1BE,UAAC,CAACE,OAAO,CAACJ,UAAU,CAAC,IACpBE,UAAC,CAACG,kBAAkB,CAACL,UAAU,CAAC,IAC/B,CAACA,UAAU,CAACM,QAAQ,IACpBP,wBAAwB,CAACC,UAAU,CAACO,MAAM,CAAE,CAAA;AAElD,CAAA;AAOA,SAASC,YAAYA,CACnB7B,IAAqE,EACrE;EACA,IAAI8B,YAAsB,GAAG9B,IAAI,CAAA;EACjC,MAAM;AAAE+B,IAAAA,KAAAA;AAAM,GAAC,GAAG/B,IAAI,CAAA;EACtB,OACE8B,YAAY,CAACE,0BAA0B,EAAE,IACzCF,YAAY,CAACG,wBAAwB,EAAE,EACvC;IACA,MAAM;AAAE9B,MAAAA,IAAAA;AAAK,KAAC,GAAG2B,YAAY,CAAA;IAC7B,MAAMI,SAAS,GAAGC,mEAA2B,CAC3CL,YAAY,CAACE,0BAA0B,EAAE,GACrCF,YAAY,CAACM,GAAG,CAAC,QAAQ,CAAC,GAC1BN,YAAY,CAACM,GAAG,CAAC,QAAQ,CAC/B,CAAC,CAAA;IACD,IAAIjC,IAAI,CAACkC,QAAQ,EAAE;MACjB,OAAO,CAACN,KAAK,CAACO,QAAQ,CAACJ,SAAS,CAAC/B,IAAI,CAAC,CAAA;AACxC,KAAA;AAEA2B,IAAAA,YAAY,GAAGI,SAAS,CAAA;AAC1B,GAAA;AACF,CAAA;AAEA,MAAMK,aAAa,GAAGC,aAAQ,CAACnB,UAAU,CACvC,0CACF,CAAC,CAAA;AACD,MAAMoB,oBAAoB,GAAGD,aAAQ,CAACnB,UAAU,CAAC,mBAAmB,CAAC,CAAA;AACrE,MAAMqB,iBAAiB,GAAGF,aAAQ,CAACnB,UAAU,CAC3C,0CACF,CAAC,CAAA;AACD,MAAMsB,wBAAwB,GAAGH,aAAQ,CAACnB,UAAU,CAAC,mBAAmB,CAAC,CAAA;AAOlE,SAASuB,sBAAsBA,CACpC5C,IAAqE,EACrE;EAAE6C,WAAW;AAAEC,EAAAA,aAAAA;AAAwC,CAAC,EACxDC,eAAuC,EACvCC,SAAuB,EACvBC,QAAgD,EAChD;EACA,MAAM;AAAElB,IAAAA,KAAAA;AAAM,GAAC,GAAG/B,IAAI,CAAA;AAItB,EAAA,IAAI+B,KAAK,CAAC/B,IAAI,CAACkD,SAAS,EAAE,IAAIrB,YAAY,CAAC7B,IAAI,CAAC,EAAE;AAChD+C,IAAAA,eAAe,CAACI,WAAW,CACzBX,aAAQ,CAACnB,UAAU,CAAC+B,GAAG,CAAUL,OAAAA,EAAAA,eAAe,CAAC5C,IAAI,KACvD,CAAC,CAAA;AAED,IAAA,OAAA;AACF,GAAA;EAEA,MAAMkD,SAAS,GAAG,EAAE,CAAA;EAEpB,IAAIvB,YAAY,GAAG9B,IAAI,CAAA;EACvB,OACE8B,YAAY,CAACE,0BAA0B,EAAE,IACzCF,YAAY,CAACG,wBAAwB,EAAE,EACvC;IACA,MAAM;AAAE9B,MAAAA,IAAAA;AAAK,KAAC,GAAG2B,YAAY,CAAA;IAC7B,IAAI3B,IAAI,CAACkC,QAAQ,EAAE;AACjBgB,MAAAA,SAAS,CAACC,IAAI,CAACnD,IAAI,CAAC,CAAA;AACtB,KAAA;AACA,IAAA,IAAI2B,YAAY,CAACE,0BAA0B,EAAE,EAAE;AAE7CF,MAAAA,YAAY,CAAC3B,IAAI,CAACoD,IAAI,GAAG,kBAAkB,CAAA;MAE3CzB,YAAY,GAAGK,mEAA2B,CAACL,YAAY,CAACM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxE,KAAC,MAAM,IAAIN,YAAY,CAACG,wBAAwB,EAAE,EAAE;AAElDH,MAAAA,YAAY,CAAC3B,IAAI,CAACoD,IAAI,GAAG,gBAAgB,CAAA;MAEzCzB,YAAY,GAAGK,mEAA2B,CAACL,YAAY,CAACM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxE,KAAA;AACF,GAAA;AAEA,EAAA,IAAIiB,SAAS,CAAC3C,MAAM,KAAK,CAAC,EAAE;AAG1B,IAAA,OAAA;AACF,GAAA;EAEA,MAAM8C,MAAM,GAAG,EAAE,CAAA;AAEjB,EAAA,IAAIC,MAAM,CAAA;AAEV,EAAA,KAAK,IAAIC,CAAC,GAAGL,SAAS,CAAC3C,MAAM,GAAG,CAAC,EAAEgD,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC9C,IAAA,MAAMvD,IAAI,GAAGkD,SAAS,CAACK,CAAC,CAEJ,CAAA;AAEpB,IAAA,MAAMC,MAAM,GAAGpC,UAAC,CAACqC,gBAAgB,CAACzD,IAAI,CAAC,CAAA;IAEvC,MAAM0D,cAAc,GAAGF,MAAM,GAExBxD,IAAI,CAAC2D,MAAM,GACZ3D,IAAI,CAACyB,MAAM,CAAA;AACf,IAAA,MAAMmC,KAAK,GAAGzC,uEAA+B,CAACuC,cAAc,CAAC,CAAA;AAE7D,IAAA,IAAIG,GAAG,CAAA;AACP,IAAA,IAAIC,KAAK,CAAA;AACT,IAAA,IAAIN,MAAM,IAAIpC,UAAC,CAACC,YAAY,CAACuC,KAAK,EAAE;AAAEG,MAAAA,IAAI,EAAE,MAAA;AAAO,KAAC,CAAC,EAAE;MACrDD,KAAK,GAAGD,GAAG,GAAGD,KAAK,CAAA;AAEnB5D,MAAAA,IAAI,CAAC2D,MAAM,GAAGvC,UAAC,CAAC4C,kBAAkB,CAAC,CAAC5C,UAAC,CAAC6C,cAAc,CAAC,CAAC,CAAC,EAAEJ,GAAG,CAAC,CAAC,CAAA;KAC/D,MAAM,IAAInB,WAAW,IAAIc,MAAM,IAAIvC,wBAAwB,CAAC2C,KAAK,CAAC,EAAE;AAInEE,MAAAA,KAAK,GAAGD,GAAG,GAAG7D,IAAI,CAAC2D,MAAM,CAAA;KAC1B,MAAM,IAAI/B,KAAK,CAACO,QAAQ,CAACyB,KAAK,CAAC,EAAE;MAChCE,KAAK,GAAGD,GAAG,GAAGH,cAAc,CAAA;AAC9B,KAAC,MAAM;AAGL,MAAA,IAAI,CAACJ,MAAM,IAAIE,MAAM,EAAE;AACrBF,QAAAA,MAAM,GAAG1B,KAAK,CAACsC,gCAAgC,CAACN,KAAK,CAAC,CAAA;QACtDhC,KAAK,CAACuB,IAAI,CAAC;AAAEgB,UAAAA,EAAE,EAAE/C,UAAC,CAACgD,SAAS,CAACd,MAAM,CAAA;AAAE,SAAC,CAAC,CAAA;AACzC,OAAA;AACAO,MAAAA,GAAG,GAAGP,MAAM,CAAA;AACZQ,MAAAA,KAAK,GAAG1C,UAAC,CAACiD,oBAAoB,CAC5B,GAAG,EACHjD,UAAC,CAACgD,SAAS,CAACd,MAAM,CAAC,EAKnBI,cACF,CAAC,CAAA;AAED,MAAA,IAAIF,MAAM,EAAE;QACVxD,IAAI,CAAC2D,MAAM,GAAGE,GAAG,CAAA;AACnB,OAAC,MAAM;QACL7D,IAAI,CAACyB,MAAM,GAAGoC,GAAG,CAAA;AACnB,OAAA;AACF,KAAA;IAIA,IAAIL,MAAM,IAAIpC,UAAC,CAACG,kBAAkB,CAACqC,KAAK,CAAC,EAAE;AACzC,MAAA,IAAIlB,WAAW,IAAIzB,wBAAwB,CAAC2C,KAAK,CAAC,EAAE;QAGlD5D,IAAI,CAAC2D,MAAM,GAAGD,cAAc,CAAA;AAC9B,OAAC,MAAM;QAGL,MAAM;AAAEjC,UAAAA,MAAAA;AAAO,SAAC,GAAGmC,KAAK,CAAA;AACxB,QAAA,IAAIU,OAAqB,CAAA;AACzB,QAAA,IAAIlD,UAAC,CAACE,OAAO,CAACG,MAAM,CAAC,EAAE;AACrB6C,UAAAA,OAAO,GAAGlD,UAAC,CAACmD,cAAc,EAAE,CAAA;AAC9B,SAAC,MAAM;AACL,UAAA,MAAMC,QAAQ,GAAG5C,KAAK,CAAC6C,qBAAqB,CAAChD,MAAM,CAAC,CAAA;AACpD,UAAA,IAAI+C,QAAQ,EAAE;AACZF,YAAAA,OAAO,GAAGE,QAAQ,CAAA;AAClBZ,YAAAA,KAAK,CAACnC,MAAM,GAAGL,UAAC,CAACiD,oBAAoB,CAAC,GAAG,EAAEG,QAAQ,EAAE/C,MAAM,CAAC,CAAA;AAC9D,WAAC,MAAM;AACL6C,YAAAA,OAAO,GAAG7C,MAAM,CAAA;AAClB,WAAA;AACF,SAAA;QAEAzB,IAAI,CAAC0E,SAAS,CAACC,OAAO,CAACvD,UAAC,CAACgD,SAAS,CAACE,OAAO,CAAC,CAAC,CAAA;AAE5CtE,QAAAA,IAAI,CAAC2D,MAAM,GAAGvC,UAAC,CAACwD,gBAAgB,CAAC5E,IAAI,CAAC2D,MAAM,EAAEvC,UAAC,CAACyD,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AACrE,OAAA;AACF,KAAA;AAEA,IAAA,MAAMC,IAAI,GAAG;AAAEhB,MAAAA,KAAK,EAAE1C,UAAC,CAACgD,SAAS,CAACN,KAAK,CAAC;AAAED,MAAAA,GAAG,EAAEzC,UAAC,CAACgD,SAAS,CAACP,GAAG,CAAA;KAAG,CAAA;AAGjEkB,IAAAA,MAAM,CAACC,cAAc,CAACF,IAAI,EAAE,KAAK,EAAE;AAAEG,MAAAA,UAAU,EAAE,KAAA;AAAM,KAAC,CAAC,CAAA;AACzD5B,IAAAA,MAAM,CAACF,IAAI,CAAC2B,IAAI,CAAC,CAAA;AACnB,GAAA;AAEA,EAAA,IAAII,MAAM,GAAGtC,eAAe,CAAC5C,IAAI,CAAA;AACjC,EAAA,IAAI8C,QAAQ,EAAEoC,MAAM,GAAGpC,QAAQ,CAACoC,MAAM,CAAC,CAAA;AAEvC,EAAA,MAAMC,gBAAgB,GAAG/D,UAAC,CAACgE,gBAAgB,CAACvC,SAAS,CAAC,CAAA;EACtD,MAAMwC,cAAc,GAAGF,gBAAgB,IAAItC,SAAS,CAACyC,KAAK,KAAK,KAAK,CAAA;EACpE,MAAMC,aAAa,GACjB,CAACJ,gBAAgB,IAAI/D,UAAC,CAACV,iBAAiB,CAACmC,SAAS,EAAE;AAAE1C,IAAAA,QAAQ,EAAE,MAAA;AAAO,GAAC,CAAC,CAAA;AAE3E,EAAA,MAAMqF,wBAAwB,GAC3BpE,UAAC,CAACqE,qBAAqB,CAAC7C,eAAe,CAAC8C,MAAM,CAAC,IAC9C,CAAC9C,eAAe,CAAC+C,kBAAkB,EAAE,IACtCvE,UAAC,CAACf,oBAAoB,CAACuC,eAAe,CAAC8C,MAAM,CAAC,IAC7C3E,IAAI,CAAC6B,eAAe,CAAC8C,MAAM,CAACpF,WAAW,CAAC,KAAKsC,eAAe,CAAC5C,IAAK,CAAA;AAGtE,EAAA,MAAM4F,GAAG,GAAGP,cAAc,GACrB1C,aAAa,GAAGH,wBAAwB,GAAGD,iBAAiB,GAC5DI,aAAa,GAAGL,oBAAoB,GAAGF,aAAc,CAAA;AAC1D,EAAA,MAAMyD,SAAS,GAAGR,cAAc,GAAG,IAAI,GAAG,IAAI,CAAA;EAE9C,MAAMvB,KAAK,GAAGT,MAAM,CACjByC,GAAG,CAACF,GAAG,CAAC,CACRG,MAAM,CAAC,CAACC,IAAI,EAAElC,KAAK,KAAK1C,UAAC,CAAC6E,iBAAiB,CAACJ,SAAS,EAAEG,IAAI,EAAElC,KAAK,CAAC,CAAC,CAAA;AAEvElB,EAAAA,eAAe,CAACI,WAAW,CACzBmC,gBAAgB,IAAKI,aAAa,IAAIC,wBAAyB,GAC3DpE,UAAC,CAAC6E,iBAAiB,CAACJ,SAAS,EAAE/B,KAAK,EAAEoB,MAAM,CAAC,GAC7C9D,UAAC,CAAC8E,qBAAqB,CAACpC,KAAK,EAAEjB,SAAS,EAAEqC,MAAM,CACtD,CAAC,CAAA;AACH,CAAA;AAEO,SAASiB,SAASA,CACvBtG,IAAqE,EACrEuG,WAAqC,EACrC;EACA,MAAM;AAAExE,IAAAA,KAAAA;AAAM,GAAC,GAAG/B,IAAI,CAAA;AAItB,EAAA,MAAMC,YAAY,GAAGC,8BAA8B,CAACF,IAAI,CAAC,CAAA;EACzD,MAAM;AAAEI,IAAAA,UAAAA;AAAW,GAAC,GAAGH,YAAY,CAAA;EAEnC,IAAIG,UAAU,CAACS,iBAAiB,CAAC;AAAEP,IAAAA,QAAQ,EAAE,QAAA;AAAS,GAAC,CAAC,EAAE;AACxDsC,IAAAA,sBAAsB,CACpB5C,IAAI,EACJuG,WAAW,EACXnG,UAAU,EACVmB,UAAC,CAACiF,cAAc,CAAC,IAAI,CACvB,CAAC,CAAA;AACH,GAAC,MAAM;AACL,IAAA,IAAIvD,QAAQ,CAAA;IACZ,IACE7C,UAAU,CAACwD,gBAAgB,CAAC;MAAEE,MAAM,EAAE7D,YAAY,CAACE,IAAAA;AAAK,KAAC,CAAC,IAG1DH,IAAI,CAACgC,0BAA0B,EAAE,EACjC;MAEAiB,QAAQ,GAAIwD,WAA+B,IAAK;AAI9C,QAAA,MAAM7E,MAAM,GAAGN,uEAA+B,CAC5CmF,WAAW,CAAC7E,MACd,CAAiB,CAAA;AACjB,QAAA,IAAI8E,OAAqB,CAAA;QACzB,IAAI,CAACH,WAAW,CAAC1D,WAAW,IAAI,CAACzB,wBAAwB,CAACQ,MAAM,CAAC,EAAE;AAIjE8E,UAAAA,OAAO,GAAG3E,KAAK,CAAC6C,qBAAqB,CAAChD,MAAM,CAAC,CAAA;AAC7C,UAAA,IAAI8E,OAAO,EAAE;AACXD,YAAAA,WAAW,CAAC7E,MAAM,GAAGL,UAAC,CAACiD,oBAAoB,CAAC,GAAG,EAAEkC,OAAO,EAAE9E,MAAM,CAAC,CAAA;AACnE,WAAA;AACF,SAAA;AACA,QAAA,OAAOL,UAAC,CAACoF,cAAc,CACrBpF,UAAC,CAACwD,gBAAgB,CAAC0B,WAAW,EAAElF,UAAC,CAACyD,UAAU,CAAC,MAAM,CAAC,CAAC,EACrD,CAACzD,UAAC,CAACgD,SAAS,CAACmC,OAAO,IAAA,IAAA,GAAPA,OAAO,GAAI9E,MAAM,CAAC,CACjC,CAAC,CAAA;OACF,CAAA;AACH,KAAA;IAEAgB,sBAAsB,CACpB5C,IAAI,EACJuG,WAAW,EACXvG,IAAI,EACJD,qBAAqB,CAACE,YAAY,CAAC,GAC/BsB,UAAC,CAACiF,cAAc,CAAC,KAAK,CAAC,GACvBzE,KAAK,CAAC6E,kBAAkB,EAAE,EAC9B3D,QACF,CAAC,CAAA;AACH,GAAA;AACF;;ACtSA,YAAe4D,yBAAO,CAAC,CAACC,GAAG,EAAEC,OAAgB,KAAK;EAAA,IAAAC,eAAA,EAAAC,gBAAA,CAAA;EAChDH,GAAG,CAACI,aAAa,CAAA,sCAAoB,CAAC,CAAA;EAEtC,MAAM;AAAEC,IAAAA,KAAK,GAAG,KAAA;AAAM,GAAC,GAAGJ,OAAO,CAAA;AACjC,EAAA,MAAMjE,aAAa,GAAA,CAAAkE,eAAA,GAAGF,GAAG,CAACM,UAAU,CAAC,eAAe,CAAC,KAAAJ,IAAAA,GAAAA,eAAA,GAAIG,KAAK,CAAA;AAC9D,EAAA,MAAMtE,WAAW,GAAA,CAAAoE,gBAAA,GAAGH,GAAG,CAACM,UAAU,CAAC,aAAa,CAAC,KAAAH,IAAAA,GAAAA,gBAAA,GAAIE,KAAK,CAAA;EAE1D,OAAO;AACLjD,IAAAA,IAAI,EAAE,6BAA6B;AACnCmD,IAAAA,iBAAiB,EAEbA,CAACC,CAAC,EAAEC,MAAM,KAAKA,MAAM,CAACC,OAAO,CAAClE,IAAI,CAAC,kBAAkB,CAAC;AAE1DmE,IAAAA,OAAO,EAAE;MACP,iDAAiDC,CAC/C1H,IAAqE,EACrE;QACAsG,SAAS,CAACtG,IAAI,EAAE;UAAE8C,aAAa;AAAED,UAAAA,WAAAA;AAAY,SAAC,CAAC,CAAA;AACjD,OAAA;AACF,KAAA;GACD,CAAA;AACH,CAAC,CAAC;;;;;;"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/package.json b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/package.json deleted file mode 100644 index 9e2e3e35..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@babel/plugin-transform-optional-chaining", - "version": "7.27.1", - "description": "Transform optional chaining operators into a series of nil checks", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel.git", - "directory": "packages/babel-plugin-transform-optional-chaining" - }, - "homepage": "https://babel.dev/docs/en/next/babel-plugin-transform-optional-chaining", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "./lib/index.js", - "keywords": [ - "babel-plugin" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "devDependencies": { - "@babel/core": "^7.27.1", - "@babel/helper-plugin-test-runner": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "author": "The Babel Team (https://babel.dev/team)", - "type": "commonjs" -} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/LICENSE b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/LICENSE deleted file mode 100644 index f31575ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/README.md b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/README.md deleted file mode 100644 index 247820ec..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# @babel/preset-typescript - -> Babel preset for TypeScript. - -See our website [@babel/preset-typescript](https://babeljs.io/docs/babel-preset-typescript) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22area%3A%20typescript%22+is%3Aopen) associated with this package. - -## Install - -Using npm: - -```sh -npm install --save-dev @babel/preset-typescript -``` - -or using yarn: - -```sh -yarn add @babel/preset-typescript --dev -``` diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js deleted file mode 100644 index 1ca507a9..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js +++ /dev/null @@ -1,167 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var helperPluginUtils = require('@babel/helper-plugin-utils'); -var transformTypeScript = require('@babel/plugin-transform-typescript'); -require('@babel/plugin-syntax-jsx'); -var transformModulesCommonJS = require('@babel/plugin-transform-modules-commonjs'); -var helperValidatorOption = require('@babel/helper-validator-option'); - -function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } - -var transformTypeScript__default = /*#__PURE__*/_interopDefault(transformTypeScript); -var transformModulesCommonJS__default = /*#__PURE__*/_interopDefault(transformModulesCommonJS); - -const v = new helperValidatorOption.OptionValidator("@babel/preset-typescript"); -function normalizeOptions(options = {}) { - let { - allowNamespaces = true, - jsxPragma, - onlyRemoveTypeImports - } = options; - const TopLevelOptions = { - ignoreExtensions: "ignoreExtensions", - allowNamespaces: "allowNamespaces", - disallowAmbiguousJSXLike: "disallowAmbiguousJSXLike", - jsxPragma: "jsxPragma", - jsxPragmaFrag: "jsxPragmaFrag", - onlyRemoveTypeImports: "onlyRemoveTypeImports", - optimizeConstEnums: "optimizeConstEnums", - rewriteImportExtensions: "rewriteImportExtensions", - allExtensions: "allExtensions", - isTSX: "isTSX" - }; - const jsxPragmaFrag = v.validateStringOption(TopLevelOptions.jsxPragmaFrag, options.jsxPragmaFrag, "React.Fragment"); - { - var allExtensions = v.validateBooleanOption(TopLevelOptions.allExtensions, options.allExtensions, false); - var isTSX = v.validateBooleanOption(TopLevelOptions.isTSX, options.isTSX, false); - if (isTSX) { - v.invariant(allExtensions, "isTSX:true requires allExtensions:true"); - } - } - const ignoreExtensions = v.validateBooleanOption(TopLevelOptions.ignoreExtensions, options.ignoreExtensions, false); - const disallowAmbiguousJSXLike = v.validateBooleanOption(TopLevelOptions.disallowAmbiguousJSXLike, options.disallowAmbiguousJSXLike, false); - if (disallowAmbiguousJSXLike) { - { - v.invariant(allExtensions, "disallowAmbiguousJSXLike:true requires allExtensions:true"); - } - } - const optimizeConstEnums = v.validateBooleanOption(TopLevelOptions.optimizeConstEnums, options.optimizeConstEnums, false); - const rewriteImportExtensions = v.validateBooleanOption(TopLevelOptions.rewriteImportExtensions, options.rewriteImportExtensions, false); - const normalized = { - ignoreExtensions, - allowNamespaces, - disallowAmbiguousJSXLike, - jsxPragma, - jsxPragmaFrag, - onlyRemoveTypeImports, - optimizeConstEnums, - rewriteImportExtensions - }; - { - normalized.allExtensions = allExtensions; - normalized.isTSX = isTSX; - } - return normalized; -} - -var pluginRewriteTSImports = helperPluginUtils.declare(function ({ - types: t, - template -}) { - function maybeReplace(source, path, state) { - if (!source) return; - if (t.isStringLiteral(source)) { - if (/^\.\.?\//.test(source.value)) { - source.value = source.value.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { - return tsx ? ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; - }); - } - return; - } - if (state.availableHelper("tsRewriteRelativeImportExtensions")) { - path.replaceWith(t.callExpression(state.addHelper("tsRewriteRelativeImportExtensions"), [source])); - } else { - path.replaceWith(template.expression.ast`(${source} + "").replace(/([\\/].*\.[mc]?)tsx?$/, "$1js")`); - } - } - return { - name: "preset-typescript/plugin-rewrite-ts-imports", - visitor: { - "ImportDeclaration|ExportAllDeclaration|ExportNamedDeclaration"(path, state) { - const node = path.node; - const kind = t.isImportDeclaration(node) ? node.importKind : node.exportKind; - if (kind === "value") { - maybeReplace(node.source, path.get("source"), state); - } - }, - CallExpression(path, state) { - if (t.isImport(path.node.callee)) { - maybeReplace(path.node.arguments[0], path.get("arguments.0"), state); - } - }, - ImportExpression(path, state) { - maybeReplace(path.node.source, path.get("source"), state); - } - } - }; -}); - -var index = helperPluginUtils.declarePreset((api, opts) => { - api.assertVersion(7); - const { - allExtensions, - ignoreExtensions, - allowNamespaces, - disallowAmbiguousJSXLike, - isTSX, - jsxPragma, - jsxPragmaFrag, - onlyRemoveTypeImports, - optimizeConstEnums, - rewriteImportExtensions - } = normalizeOptions(opts); - const pluginOptions = disallowAmbiguousJSXLike => ({ - allowDeclareFields: opts.allowDeclareFields, - allowNamespaces, - disallowAmbiguousJSXLike, - jsxPragma, - jsxPragmaFrag, - onlyRemoveTypeImports, - optimizeConstEnums - }); - const getPlugins = (isTSX, disallowAmbiguousJSXLike) => { - { - return [[transformTypeScript__default.default, Object.assign({ - isTSX - }, pluginOptions(disallowAmbiguousJSXLike))]]; - } - }; - const disableExtensionDetect = allExtensions || ignoreExtensions; - return { - plugins: rewriteImportExtensions ? [pluginRewriteTSImports] : [], - overrides: disableExtensionDetect ? [{ - plugins: getPlugins(isTSX, disallowAmbiguousJSXLike) - }] : [{ - test: /\.ts$/, - plugins: getPlugins(false, false) - }, { - test: /\.mts$/, - sourceType: "module", - plugins: getPlugins(false, true) - }, { - test: /\.cts$/, - sourceType: "unambiguous", - plugins: [[transformModulesCommonJS__default.default, { - allowTopLevelThis: true - }], [transformTypeScript__default.default, pluginOptions(true)]] - }, { - test: /\.tsx$/, - plugins: getPlugins(true, false) - }] - }; -}); - -exports.default = index; -//# sourceMappingURL=index.js.map diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js.map b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js.map deleted file mode 100644 index e0320e45..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sources":["../src/normalize-options.ts","../src/plugin-rewrite-ts-imports.ts","../src/index.ts"],"sourcesContent":["import { OptionValidator } from \"@babel/helper-validator-option\";\nconst v = new OptionValidator(\"@babel/preset-typescript\");\n\nexport interface Options {\n ignoreExtensions?: boolean;\n allowDeclareFields?: boolean;\n allowNamespaces?: boolean;\n disallowAmbiguousJSXLike?: boolean;\n jsxPragma?: string;\n jsxPragmaFrag?: string;\n onlyRemoveTypeImports?: boolean;\n optimizeConstEnums?: boolean;\n rewriteImportExtensions?: boolean;\n\n // TODO: Remove in Babel 8\n allExtensions?: boolean;\n isTSX?: boolean;\n}\n\nexport default function normalizeOptions(options: Options = {}) {\n let { allowNamespaces = true, jsxPragma, onlyRemoveTypeImports } = options;\n\n const TopLevelOptions: {\n [Key in keyof Omit]-?: Key;\n } = {\n ignoreExtensions: \"ignoreExtensions\",\n allowNamespaces: \"allowNamespaces\",\n disallowAmbiguousJSXLike: \"disallowAmbiguousJSXLike\",\n jsxPragma: \"jsxPragma\",\n jsxPragmaFrag: \"jsxPragmaFrag\",\n onlyRemoveTypeImports: \"onlyRemoveTypeImports\",\n optimizeConstEnums: \"optimizeConstEnums\",\n rewriteImportExtensions: \"rewriteImportExtensions\",\n\n // TODO: Remove in Babel 8\n allExtensions: \"allExtensions\",\n isTSX: \"isTSX\",\n };\n\n if (process.env.BABEL_8_BREAKING) {\n v.invariant(\n !(\"allowDeclareFields\" in options),\n \"The .allowDeclareFields option has been removed and it's now always enabled. Please remove it from your config.\",\n );\n v.invariant(\n !(\"allExtensions\" in options) && !(\"isTSX\" in options),\n \"The .allExtensions and .isTSX options have been removed.\\n\" +\n \"If you want to disable JSX detection based on file extensions, \" +\n \"you can set the .ignoreExtensions option to true.\\n\" +\n \"If you want to force JSX parsing, you can enable the \" +\n \"@babel/plugin-syntax-jsx plugin.\",\n );\n\n v.validateTopLevelOptions(options, TopLevelOptions);\n allowNamespaces = v.validateBooleanOption(\n TopLevelOptions.allowNamespaces,\n options.allowNamespaces,\n true,\n );\n jsxPragma = v.validateStringOption(\n TopLevelOptions.jsxPragma,\n options.jsxPragma,\n \"React\",\n );\n onlyRemoveTypeImports = v.validateBooleanOption(\n TopLevelOptions.onlyRemoveTypeImports,\n options.onlyRemoveTypeImports,\n true,\n );\n }\n\n const jsxPragmaFrag = v.validateStringOption(\n TopLevelOptions.jsxPragmaFrag,\n options.jsxPragmaFrag,\n \"React.Fragment\",\n );\n\n if (!process.env.BABEL_8_BREAKING) {\n // eslint-disable-next-line no-var\n var allExtensions = v.validateBooleanOption(\n TopLevelOptions.allExtensions,\n options.allExtensions,\n false,\n );\n\n // eslint-disable-next-line no-var\n var isTSX = v.validateBooleanOption(\n TopLevelOptions.isTSX,\n options.isTSX,\n false,\n );\n if (isTSX) {\n v.invariant(allExtensions, \"isTSX:true requires allExtensions:true\");\n }\n }\n\n const ignoreExtensions = v.validateBooleanOption(\n TopLevelOptions.ignoreExtensions,\n options.ignoreExtensions,\n false,\n );\n\n const disallowAmbiguousJSXLike = v.validateBooleanOption(\n TopLevelOptions.disallowAmbiguousJSXLike,\n options.disallowAmbiguousJSXLike,\n false,\n );\n if (disallowAmbiguousJSXLike) {\n if (process.env.BABEL_8_BREAKING) {\n v.invariant(\n ignoreExtensions,\n \"disallowAmbiguousJSXLike:true requires ignoreExtensions:true\",\n );\n } else {\n v.invariant(\n allExtensions,\n \"disallowAmbiguousJSXLike:true requires allExtensions:true\",\n );\n }\n }\n\n const optimizeConstEnums = v.validateBooleanOption(\n TopLevelOptions.optimizeConstEnums,\n options.optimizeConstEnums,\n false,\n );\n\n const rewriteImportExtensions = v.validateBooleanOption(\n TopLevelOptions.rewriteImportExtensions,\n options.rewriteImportExtensions,\n false,\n );\n\n const normalized: Options = {\n ignoreExtensions,\n allowNamespaces,\n disallowAmbiguousJSXLike,\n jsxPragma,\n jsxPragmaFrag,\n onlyRemoveTypeImports,\n optimizeConstEnums,\n rewriteImportExtensions,\n };\n if (!process.env.BABEL_8_BREAKING) {\n normalized.allExtensions = allExtensions;\n normalized.isTSX = isTSX;\n }\n return normalized;\n}\n","import { declare } from \"@babel/helper-plugin-utils\";\nimport type { types as t, NodePath, PluginPass } from \"@babel/core\";\n\nexport default declare(function ({ types: t, template }) {\n function maybeReplace(\n source: t.ArgumentPlaceholder | t.Expression,\n path: NodePath,\n state: PluginPass,\n ) {\n if (!source) return;\n // todo: if we want to support `preserveJsx`, we can register a global flag via file.set from transform-react-jsx, and read it here.\n const preserveJsx = false;\n if (t.isStringLiteral(source)) {\n if (/^\\.\\.?\\//.test(source.value)) {\n // @see packages/babel-helpers/src/helpers/tsRewriteRelativeImportExtensions.ts\n source.value = source.value.replace(\n /\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+)?)\\.([cm]?)ts$/i,\n function (m, tsx, d, ext, cm) {\n return tsx\n ? preserveJsx\n ? \".jsx\"\n : \".js\"\n : d && (!ext || !cm)\n ? m\n : d + ext + \".\" + cm.toLowerCase() + \"js\";\n },\n );\n }\n return;\n }\n\n if (\n process.env.BABEL_8_BREAKING ||\n state.availableHelper(\"tsRewriteRelativeImportExtensions\")\n ) {\n path.replaceWith(\n t.callExpression(\n state.addHelper(\"tsRewriteRelativeImportExtensions\"),\n preserveJsx ? [source, t.booleanLiteral(true)] : [source],\n ),\n );\n } else {\n path.replaceWith(\n template.expression\n .ast`(${source} + \"\").replace(/([\\\\/].*\\.[mc]?)tsx?$/, \"$1js\")`,\n );\n }\n }\n\n return {\n name: \"preset-typescript/plugin-rewrite-ts-imports\",\n visitor: {\n \"ImportDeclaration|ExportAllDeclaration|ExportNamedDeclaration\"(\n path: NodePath<\n | t.ImportDeclaration\n | t.ExportAllDeclaration\n | t.ExportNamedDeclaration\n >,\n state,\n ) {\n const node = path.node;\n const kind = t.isImportDeclaration(node)\n ? node.importKind\n : node.exportKind;\n if (kind === \"value\") {\n maybeReplace(node.source, path.get(\"source\"), state);\n }\n },\n CallExpression(path, state) {\n if (!process.env.BABEL_8_BREAKING && t.isImport(path.node.callee)) {\n maybeReplace(\n // The argument of import must not be a spread element\n path.node.arguments[0] as t.ArgumentPlaceholder | t.Expression,\n path.get(\"arguments.0\"),\n state,\n );\n }\n },\n ImportExpression(path, state) {\n maybeReplace(path.node.source, path.get(\"source\"), state);\n },\n },\n };\n});\n","import { declarePreset } from \"@babel/helper-plugin-utils\";\nimport transformTypeScript from \"@babel/plugin-transform-typescript\";\nimport syntaxJSX from \"@babel/plugin-syntax-jsx\";\nimport transformModulesCommonJS from \"@babel/plugin-transform-modules-commonjs\";\nimport normalizeOptions from \"./normalize-options.ts\";\nimport type { Options } from \"./normalize-options.ts\";\nimport pluginRewriteTSImports from \"./plugin-rewrite-ts-imports.ts\";\n\nexport default declarePreset((api, opts: Options) => {\n api.assertVersion(REQUIRED_VERSION(7));\n\n const {\n allExtensions,\n ignoreExtensions,\n allowNamespaces,\n disallowAmbiguousJSXLike,\n isTSX,\n jsxPragma,\n jsxPragmaFrag,\n onlyRemoveTypeImports,\n optimizeConstEnums,\n rewriteImportExtensions,\n } = normalizeOptions(opts);\n\n const pluginOptions = process.env.BABEL_8_BREAKING\n ? (disallowAmbiguousJSXLike: boolean) => ({\n allowNamespaces,\n disallowAmbiguousJSXLike,\n jsxPragma,\n jsxPragmaFrag,\n onlyRemoveTypeImports,\n optimizeConstEnums,\n })\n : (disallowAmbiguousJSXLike: boolean) => ({\n allowDeclareFields: opts.allowDeclareFields,\n allowNamespaces,\n disallowAmbiguousJSXLike,\n jsxPragma,\n jsxPragmaFrag,\n onlyRemoveTypeImports,\n optimizeConstEnums,\n });\n\n const getPlugins = (isTSX: boolean, disallowAmbiguousJSXLike: boolean) => {\n if (process.env.BABEL_8_BREAKING) {\n const tsPlugin = [\n transformTypeScript,\n pluginOptions(disallowAmbiguousJSXLike),\n ];\n return isTSX ? [tsPlugin, syntaxJSX] : [tsPlugin];\n } else {\n return [\n [\n transformTypeScript,\n { isTSX, ...pluginOptions(disallowAmbiguousJSXLike) },\n ],\n ];\n }\n };\n\n const disableExtensionDetect = allExtensions || ignoreExtensions;\n\n return {\n plugins: rewriteImportExtensions ? [pluginRewriteTSImports] : [],\n overrides: disableExtensionDetect\n ? [{ plugins: getPlugins(isTSX, disallowAmbiguousJSXLike) }]\n : // Only set 'test' if explicitly requested, since it requires that\n // Babel is being called with a filename.\n [\n {\n test: !process.env.BABEL_8_BREAKING\n ? /\\.ts$/\n : filename => filename == null || filename.endsWith(\".ts\"),\n plugins: getPlugins(false, false),\n },\n {\n test: !process.env.BABEL_8_BREAKING\n ? /\\.mts$/\n : filename => filename?.endsWith(\".mts\"),\n sourceType: \"module\",\n plugins: getPlugins(false, true),\n },\n {\n test: !process.env.BABEL_8_BREAKING\n ? /\\.cts$/\n : filename => filename?.endsWith(\".cts\"),\n sourceType: \"unambiguous\",\n plugins: [\n [transformModulesCommonJS, { allowTopLevelThis: true }],\n [transformTypeScript, pluginOptions(true)],\n ],\n },\n {\n test: !process.env.BABEL_8_BREAKING\n ? /\\.tsx$/\n : filename => filename?.endsWith(\".tsx\"),\n // disallowAmbiguousJSXLike is a no-op when parsing TSX, since it's\n // always disallowed.\n plugins: getPlugins(true, false),\n },\n ],\n };\n});\n"],"names":["v","OptionValidator","normalizeOptions","options","allowNamespaces","jsxPragma","onlyRemoveTypeImports","TopLevelOptions","ignoreExtensions","disallowAmbiguousJSXLike","jsxPragmaFrag","optimizeConstEnums","rewriteImportExtensions","allExtensions","isTSX","validateStringOption","validateBooleanOption","invariant","normalized","declare","types","t","template","maybeReplace","source","path","state","isStringLiteral","test","value","replace","m","tsx","d","ext","cm","toLowerCase","availableHelper","replaceWith","callExpression","addHelper","expression","ast","name","visitor","ImportDeclaration|ExportAllDeclaration|ExportNamedDeclaration","node","kind","isImportDeclaration","importKind","exportKind","get","CallExpression","isImport","callee","arguments","ImportExpression","declarePreset","api","opts","assertVersion","pluginOptions","allowDeclareFields","getPlugins","transformTypeScript","Object","assign","disableExtensionDetect","plugins","pluginRewriteTSImports","overrides","sourceType","transformModulesCommonJS","allowTopLevelThis"],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/package.json b/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/package.json deleted file mode 100644 index c893431b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/@babel/preset-typescript/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@babel/preset-typescript", - "version": "7.27.1", - "description": "Babel preset for TypeScript.", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel.git", - "directory": "packages/babel-preset-typescript" - }, - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "./lib/index.js", - "keywords": [ - "babel-preset", - "typescript" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "devDependencies": { - "@babel/core": "^7.27.1", - "@babel/helper-plugin-test-runner": "^7.27.1" - }, - "homepage": "https://babel.dev/docs/en/next/babel-preset-typescript", - "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22area%3A%20typescript%22+is%3Aopen", - "engines": { - "node": ">=6.9.0" - }, - "author": "The Babel Team (https://babel.dev/team)", - "type": "commonjs" -} \ No newline at end of file diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/range.js b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/range.js index 94629ce6..f80c2359 100644 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/range.js +++ b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/range.js @@ -255,7 +255,6 @@ const isSatisfiable = (comparators, options) => { // already replaced the hyphen ranges // turn into a set of JUST comparators. const parseComparator = (comp, options) => { - comp = comp.replace(re[t.BUILD], '') debug('comp', comp, options) comp = replaceCarets(comp, options) debug('caret', comp) diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/semver.js b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/semver.js index 92254be1..2efba0f4 100644 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/semver.js +++ b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/classes/semver.js @@ -111,25 +111,11 @@ class SemVer { other = new SemVer(other, this.options) } - if (this.major < other.major) { - return -1 - } - if (this.major > other.major) { - return 1 - } - if (this.minor < other.minor) { - return -1 - } - if (this.minor > other.minor) { - return 1 - } - if (this.patch < other.patch) { - return -1 - } - if (this.patch > other.patch) { - return 1 - } - return 0 + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) } comparePre (other) { diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/internal/identifiers.js b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/internal/identifiers.js index d053472d..a4613dee 100644 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/internal/identifiers.js +++ b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/internal/identifiers.js @@ -2,10 +2,6 @@ const numeric = /^[0-9]+$/ const compareIdentifiers = (a, b) => { - if (typeof a === 'number' && typeof b === 'number') { - return a === b ? 0 : a < b ? -1 : 1 - } - const anum = numeric.test(a) const bnum = numeric.test(b) diff --git a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/package.json b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/package.json index 2b8cadaa..1fbef5a9 100644 --- a/frontend-admin/node_modules/react-native-worklets/node_modules/semver/package.json +++ b/frontend-admin/node_modules/react-native-worklets/node_modules/semver/package.json @@ -1,6 +1,6 @@ { "name": "semver", - "version": "7.7.3", + "version": "7.7.2", "description": "The semantic version parser used by npm.", "main": "index.js", "scripts": { @@ -15,7 +15,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^5.0.0", - "@npmcli/template-oss": "4.25.1", + "@npmcli/template-oss": "4.24.3", "benchmark": "^2.1.4", "tap": "^16.0.0" }, @@ -52,7 +52,7 @@ "author": "GitHub Inc.", "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.25.1", + "version": "4.24.3", "engines": ">=10", "distPaths": [ "classes/", diff --git a/frontend-admin/node_modules/react-native-worklets/package.json b/frontend-admin/node_modules/react-native-worklets/package.json index c0046427..13fa4d53 100644 --- a/frontend-admin/node_modules/react-native-worklets/package.json +++ b/frontend-admin/node_modules/react-native-worklets/package.json @@ -1,6 +1,6 @@ { "name": "react-native-worklets", - "version": "0.7.2", + "version": "0.5.1", "description": "The React Native multithreading library", "keywords": [ "react-native", @@ -31,12 +31,12 @@ "lint:js": "eslint src && yarn prettier --check src", "lint:plugin": "yarn workspace babel-plugin-worklets lint", "test": "jest", - "type:check": "yarn type:check:src:native && yarn type:check:src:web && yarn type:check:plugin && yarn type:check:app && yarn type:check:tests", - "type:check:src:native": "yarn tsc --noEmit", - "type:check:src:web": "yarn tsc --noEmit --project tsconfig.web.json", + "type:check": "yarn type:check:src && yarn type:check:plugin && yarn type:check:app && yarn type:check:tests", + "type:check:src": "yarn tsc --noEmit", "type:check:app": "yarn workspace common-app type:check", "type:check:plugin": "yarn workspace babel-plugin-worklets type:check", - "type:check:tests": "../../scripts/test-ts.sh __typetests__" + "type:check:tests": "../../scripts/test-ts.sh __typetests__", + "use-strict-check": "node ../../scripts/validate-use-strict.js" }, "repository": { "type": "git", @@ -50,41 +50,41 @@ }, "homepage": "https://docs.swmansion.com/react-native-worklets", "peerDependencies": { - "@babel/core": "*", + "@babel/core": "^7.0.0-0", "react": "*", "react-native": "*" }, "dependencies": { - "@babel/plugin-transform-arrow-functions": "7.27.1", - "@babel/plugin-transform-class-properties": "7.27.1", - "@babel/plugin-transform-classes": "7.28.4", - "@babel/plugin-transform-nullish-coalescing-operator": "7.27.1", - "@babel/plugin-transform-optional-chaining": "7.27.1", - "@babel/plugin-transform-shorthand-properties": "7.27.1", - "@babel/plugin-transform-template-literals": "7.27.1", - "@babel/plugin-transform-unicode-regex": "7.27.1", - "@babel/preset-typescript": "7.27.1", - "convert-source-map": "2.0.0", - "semver": "7.7.3" + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-class-properties": "^7.0.0-0", + "@babel/plugin-transform-classes": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/plugin-transform-unicode-regex": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "semver": "7.7.2" }, "devDependencies": { - "@babel/cli": "7.28.3", - "@babel/core": "7.28.4", + "@babel/cli": "^7.20.0", + "@babel/core": "^7.25.2", "@react-native-community/cli": "20.0.0", - "@react-native/eslint-config": "0.83.1", - "@types/jest": "30.0.0", - "@types/node": "24.7.0", - "@types/react": "19.2.2", - "clang-format-node": "1.3.5", - "code-tag": "1.2.0", - "eslint": "9.37.0", - "jest": "30.2.0", - "knip": "5.61.3", - "madge": "8.0.0", - "prettier": "3.6.2", - "react": "19.2.0", - "react-native": "0.83.1", - "react-native-builder-bob": "0.40.13", + "@react-native/eslint-config": "0.81.0", + "@types/jest": "^29.5.5", + "@types/react": "^19.1.0", + "babel-plugin-worklets": "workspace:*", + "clang-format-node": "^1.3.1", + "eslint": "^9.29.0", + "eslint-plugin-reanimated": "workspace:*", + "jest": "^29.0.0", + "knip": "^5.61.3", + "madge": "^5.0.1", + "prettier": "^3.3.3", + "react": "19.1.0", + "react-native": "patch:react-native@npm%3A0.81.0#~/.yarn/patches/react-native-npm-0.81.0-96e336150b.patch", + "react-native-builder-bob": "patch:react-native-builder-bob@npm%3A0.33.1#~/.yarn/patches/react-native-builder-bob-npm-0.33.1-383d9e23a5.patch", "typescript": "5.8.3" }, "main": "./lib/module/index", @@ -104,7 +104,6 @@ "scripts/worklets_utils.rb", "scripts/validate-react-native-version.js", "plugin/index.js", - "plugin/index.d.ts", "*.podspec", "react-native.config.js", "!apple/build", @@ -118,15 +117,6 @@ "!**/__mocks__", "!**/.*" ], - "sideEffects": [ - "./src/index.ts", - "./lib/module/index.js", - "./**/runtimeKind.{js,ts}", - "./**/serializable.native.{js,ts}", - "./**/workletRuntimeEntry.native.{js,ts}", - "./**/initializers.native.{js,ts}", - "./**/featureFlags.native.{js,ts}" - ], "react-native-builder-bob": { "source": "src", "output": "lib", @@ -134,8 +124,8 @@ [ "module", { - "esm": false, - "jsxRuntime": "automatic" + "esm": true, + "jsxRuntime": "classic" } ], "typescript" diff --git a/frontend-admin/node_modules/react-native-worklets/plugin/index.d.ts b/frontend-admin/node_modules/react-native-worklets/plugin/index.d.ts deleted file mode 100644 index 5aa30926..00000000 --- a/frontend-admin/node_modules/react-native-worklets/plugin/index.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface PluginOptions { - bundleMode?: boolean; - disableInlineStylesWarning?: boolean; - disableSourceMaps?: boolean; - disableWorkletClasses?: boolean; - extraPlugins?: string[]; - extraPresets?: string[]; - globals?: string[]; - omitNativeOnlyData?: boolean; - relativeSourceLocation?: boolean; - substituteWebPlatformChecks?: boolean; - workletizableModules?: string[]; -} diff --git a/frontend-admin/node_modules/react-native-worklets/plugin/index.js b/frontend-admin/node_modules/react-native-worklets/plugin/index.js index 098edfaf..6419dc44 100644 --- a/frontend-admin/node_modules/react-native-worklets/plugin/index.js +++ b/frontend-admin/node_modules/react-native-worklets/plugin/index.js @@ -30,7 +30,7 @@ var require_gestureHandlerAutoworkletization = __commonJS({ "lib/gestureHandlerAutoworkletization.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.gestureHandlerObjectHooks = exports2.gestureHandlerBuilderMethods = void 0; + exports2.gestureHandlerBuilderMethods = void 0; exports2.isGestureHandlerEventCallback = isGestureHandlerEventCallback; exports2.isGestureObjectEventCallbackMethod = isGestureObjectEventCallbackMethod; var types_12 = require("@babel/types"); @@ -61,17 +61,6 @@ var require_gestureHandlerAutoworkletization = __commonJS({ "onTouchesUp", "onTouchesCancelled" ]); - exports2.gestureHandlerObjectHooks = /* @__PURE__ */ new Set([ - "useTapGesture", - "usePanGesture", - "usePinchGesture", - "useRotationGesture", - "useFlingGesture", - "useLongPressGesture", - "useNativeGesture", - "useManualGesture", - "useHoverGesture" - ]); function isGestureHandlerEventCallback(path) { return (0, types_12.isCallExpression)(path.parent) && (0, types_12.isExpression)(path.parent.callee) && isGestureObjectEventCallbackMethod(path.parent.callee); } @@ -281,97 +270,6 @@ var require_types = __commonJS({ } }); -// lib/referencedWorklets.js -var require_referencedWorklets = __commonJS({ - "lib/referencedWorklets.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.findReferencedWorklet = findReferencedWorklet; - var types_12 = require("@babel/types"); - var types_2 = require_types(); - function findReferencedWorklet(workletIdentifier, acceptWorkletizableFunction, acceptObject, state) { - const workletName = workletIdentifier.node.name; - const scope = workletIdentifier.scope; - const workletBinding = scope.getBinding(workletName); - if (!workletBinding) { - return void 0; - } - if (state.opts.bundleMode && bindingIsWorklet(workletBinding)) { - return void 0; - } - if (acceptWorkletizableFunction && workletBinding.path.isFunctionDeclaration()) { - return workletBinding.path; - } - const isConstant = workletBinding.constant; - if (isConstant) { - return findReferencedWorkletFromVariableDeclarator(workletBinding, acceptWorkletizableFunction, acceptObject, state); - } - return findReferencedWorkletFromAssignmentExpression(workletBinding, acceptWorkletizableFunction, acceptObject, state); - } - function findReferencedWorkletFromVariableDeclarator(workletBinding, acceptWorkletizableFunction, acceptObject, state) { - const workletDeclaration = workletBinding.path; - if (!workletDeclaration.isVariableDeclarator()) { - return void 0; - } - const worklet = workletDeclaration.get("init"); - if (acceptWorkletizableFunction && (0, types_2.isWorkletizableFunctionPath)(worklet)) { - return worklet; - } - if (acceptObject && (0, types_2.isWorkletizableObjectPath)(worklet)) { - return worklet; - } - if (worklet.isIdentifier() && worklet.isReferencedIdentifier()) { - return findReferencedWorklet(worklet, acceptWorkletizableFunction, acceptObject, state); - } - return void 0; - } - function findReferencedWorkletFromAssignmentExpression(workletBinding, acceptWorkletizableFunction, acceptObject, state) { - const workletDeclaration = workletBinding.constantViolations.reverse().find((constantViolation) => constantViolation.isAssignmentExpression() && (acceptWorkletizableFunction && (0, types_2.isWorkletizableFunctionPath)(constantViolation.get("right")) || acceptObject && (0, types_2.isWorkletizableObjectPath)(constantViolation.get("right")))); - if (!workletDeclaration || !workletDeclaration.isAssignmentExpression()) { - return void 0; - } - const workletDefinition = workletDeclaration.get("right"); - if (acceptWorkletizableFunction && (0, types_2.isWorkletizableFunctionPath)(workletDefinition)) { - return workletDefinition; - } - if (acceptObject && (0, types_2.isWorkletizableObjectPath)(workletDefinition)) { - return workletDefinition; - } - if (workletDefinition.isIdentifier() && workletDefinition.isReferencedIdentifier()) { - return findReferencedWorklet(workletDefinition, acceptWorkletizableFunction, acceptObject, state); - } - return void 0; - } - function bindingIsWorklet(binding) { - return binding.referencePaths.some((refPath) => !Array.isArray(refPath.container) && (0, types_12.isMemberExpression)(refPath.container) && refPath.container.object === refPath.node && (0, types_12.isIdentifier)(refPath.container.property) && refPath.container.property.name === "__workletHash"); - } - } -}); - -// lib/findWorklet.js -var require_findWorklet = __commonJS({ - "lib/findWorklet.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.findWorklet = findWorklet; - var referencedWorklets_1 = require_referencedWorklets(); - var types_12 = require_types(); - function findWorklet(nodePath, state, acceptWorkletizableFunction, acceptObject) { - if (acceptWorkletizableFunction && (0, types_12.isWorkletizableFunctionPath)(nodePath)) { - return nodePath; - } - if (acceptObject && (0, types_12.isWorkletizableObjectPath)(nodePath)) { - return nodePath; - } - if (nodePath.isIdentifier() && nodePath.isReferencedIdentifier()) { - const worklet = (0, referencedWorklets_1.findReferencedWorklet)(nodePath, acceptWorkletizableFunction, acceptObject, state); - return worklet; - } - return void 0; - } - } -}); - // lib/utils.js var require_utils = __commonJS({ "lib/utils.js"(exports2) { @@ -673,8 +571,9 @@ var require_transform = __commonJS({ "use strict"; var __rest = exports2 && exports2.__rest || function(s, e) { var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) @@ -700,8 +599,9 @@ var require_transform = __commonJS({ var require_workletStringCode = __commonJS({ "lib/workletStringCode.js"(exports2) { "use strict"; - var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; + var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { @@ -709,34 +609,40 @@ var require_workletStringCode = __commonJS({ } }; } Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; + } : function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; o[k2] = m[k]; - })); - var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) { + }); + var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); - }) : function(o, v) { + } : function(o, v) { o["default"] = v; }); - var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() { + var __importStar = exports2 && exports2.__importStar || function() { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function(o2) { var ar = []; - for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k; + for (var k in o2) + if (Object.prototype.hasOwnProperty.call(o2, k)) + ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function(mod) { - if (mod && mod.__esModule) return mod; + if (mod && mod.__esModule) + return mod; var result = {}; if (mod != null) { - for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + for (var k = ownKeys(mod), i = 0; i < k.length; i++) + if (k[i] !== "default") + __createBinding(result, mod, k[i]); } __setModuleDefault(result, mod); return result; }; - })(); + }(); var __importDefault = exports2 && exports2.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; @@ -761,28 +667,26 @@ var require_workletStringCode = __commonJS({ (0, assert_1.strict)("params" in expression, "'params' property is undefined in 'expression'"); (0, assert_1.strict)((0, types_12.isBlockStatement)(expression.body), "[Reanimated] `expression.body` is not a `BlockStatement`"); const parsedClasses = /* @__PURE__ */ new Set(); - if (!state.opts.disableWorkletClasses) { - (0, core_1.traverse)(fun, { - NewExpression(path) { - if (!(0, types_12.isIdentifier)(path.node.callee)) { - return; - } - const constructorName = path.node.callee.name; - if (!closureVariables.some((variable) => variable.name === constructorName) || parsedClasses.has(constructorName)) { - return; - } - const index = closureVariables.findIndex((variable) => variable.name === constructorName); - closureVariables.splice(index, 1); - const workletClassFactoryName = constructorName + types_2.workletClassFactorySuffix; - closureVariables.push((0, types_12.identifier)(workletClassFactoryName)); - (0, types_12.assertBlockStatement)(expression.body); - expression.body.body.unshift((0, types_12.variableDeclaration)("const", [ - (0, types_12.variableDeclarator)((0, types_12.identifier)(constructorName), (0, types_12.callExpression)((0, types_12.identifier)(workletClassFactoryName), [])) - ])); - parsedClasses.add(constructorName); + (0, core_1.traverse)(fun, { + NewExpression(path) { + if (!(0, types_12.isIdentifier)(path.node.callee)) { + return; } - }); - } + const constructorName = path.node.callee.name; + if (!closureVariables.some((variable) => variable.name === constructorName) || parsedClasses.has(constructorName)) { + return; + } + const index = closureVariables.findIndex((variable) => variable.name === constructorName); + closureVariables.splice(index, 1); + const workletClassFactoryName = constructorName + types_2.workletClassFactorySuffix; + closureVariables.push((0, types_12.identifier)(workletClassFactoryName)); + (0, types_12.assertBlockStatement)(expression.body); + expression.body.body.unshift((0, types_12.variableDeclaration)("const", [ + (0, types_12.variableDeclarator)((0, types_12.identifier)(constructorName), (0, types_12.callExpression)((0, types_12.identifier)(workletClassFactoryName), [])) + ])); + parsedClasses.add(constructorName); + } + }); const workletFunction = (0, types_12.functionExpression)((0, types_12.identifier)(workletName), expression.params, expression.body, expression.generator, expression.async); const code = (0, generator_1.default)(workletFunction).code; (0, assert_1.strict)(inputMap, "[Reanimated] `inputMap` is undefined."); @@ -1156,23 +1060,9 @@ var require_objectWorklets = __commonJS({ "lib/objectWorklets.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.tryProcessingNode = tryProcessingNode; exports2.processWorkletizableObject = processWorkletizableObject; - var findWorklet_1 = require_findWorklet(); var types_12 = require_types(); var workletSubstitution_12 = require_workletSubstitution(); - function tryProcessingNode(arg, state, acceptWorkletizableFunction, acceptObject) { - var _a; - const maybeWorklet = (0, findWorklet_1.findWorklet)(arg, state, acceptWorkletizableFunction, acceptObject); - if (!maybeWorklet || ((_a = maybeWorklet.getFunctionParent()) === null || _a === void 0 ? void 0 : _a.node.workletized)) { - return; - } - if ((0, types_12.isWorkletizableFunctionPath)(maybeWorklet)) { - (0, workletSubstitution_12.processWorklet)(maybeWorklet, state); - } else if ((0, types_12.isWorkletizableObjectPath)(maybeWorklet)) { - processWorkletizableObject(maybeWorklet, state); - } - } function processWorkletizableObject(path, state) { const properties = path.get("properties"); for (const property of properties) { @@ -1180,7 +1070,9 @@ var require_objectWorklets = __commonJS({ (0, workletSubstitution_12.processWorklet)(property, state); } else if (property.isObjectProperty()) { const value = property.get("value"); - tryProcessingNode(value, state, true, false); + if ((0, types_12.isWorkletizableFunctionPath)(value)) { + (0, workletSubstitution_12.processWorklet)(value, state); + } } else { throw new Error(`[Reanimated] '${property.type}' as to-be workletized argument is not supported for object hooks.`); } @@ -1189,6 +1081,66 @@ var require_objectWorklets = __commonJS({ } }); +// lib/referencedWorklets.js +var require_referencedWorklets = __commonJS({ + "lib/referencedWorklets.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.findReferencedWorklet = findReferencedWorklet; + var types_12 = require_types(); + function findReferencedWorklet(workletIdentifier, acceptWorkletizableFunction, acceptObject) { + const workletName = workletIdentifier.node.name; + const scope = workletIdentifier.scope; + const workletBinding = scope.getBinding(workletName); + if (!workletBinding) { + return void 0; + } + if (acceptWorkletizableFunction && workletBinding.path.isFunctionDeclaration()) { + return workletBinding.path; + } + const isConstant = workletBinding.constant; + if (isConstant) { + return findReferencedWorkletFromVariableDeclarator(workletBinding, acceptWorkletizableFunction, acceptObject); + } + return findReferencedWorkletFromAssignmentExpression(workletBinding, acceptWorkletizableFunction, acceptObject); + } + function findReferencedWorkletFromVariableDeclarator(workletBinding, acceptWorkletizableFunction, acceptObject) { + const workletDeclaration = workletBinding.path; + if (!workletDeclaration.isVariableDeclarator()) { + return void 0; + } + const worklet = workletDeclaration.get("init"); + if (acceptWorkletizableFunction && (0, types_12.isWorkletizableFunctionPath)(worklet)) { + return worklet; + } + if (acceptObject && (0, types_12.isWorkletizableObjectPath)(worklet)) { + return worklet; + } + if (worklet.isIdentifier() && worklet.isReferencedIdentifier()) { + return findReferencedWorklet(worklet, acceptWorkletizableFunction, acceptObject); + } + return void 0; + } + function findReferencedWorkletFromAssignmentExpression(workletBinding, acceptWorkletizableFunction, acceptObject) { + const workletDeclaration = workletBinding.constantViolations.reverse().find((constantViolation) => constantViolation.isAssignmentExpression() && (acceptWorkletizableFunction && (0, types_12.isWorkletizableFunctionPath)(constantViolation.get("right")) || acceptObject && (0, types_12.isWorkletizableObjectPath)(constantViolation.get("right")))); + if (!workletDeclaration || !workletDeclaration.isAssignmentExpression()) { + return void 0; + } + const workletDefinition = workletDeclaration.get("right"); + if (acceptWorkletizableFunction && (0, types_12.isWorkletizableFunctionPath)(workletDefinition)) { + return workletDefinition; + } + if (acceptObject && (0, types_12.isWorkletizableObjectPath)(workletDefinition)) { + return workletDefinition; + } + if (workletDefinition.isIdentifier() && workletDefinition.isReferencedIdentifier()) { + return findReferencedWorklet(workletDefinition, acceptWorkletizableFunction, acceptObject); + } + return void 0; + } + } +}); + // lib/autoworkletization.js var require_autoworkletization = __commonJS({ "lib/autoworkletization.js"(exports2) { @@ -1200,11 +1152,10 @@ var require_autoworkletization = __commonJS({ var gestureHandlerAutoworkletization_1 = require_gestureHandlerAutoworkletization(); var layoutAnimationAutoworkletization_1 = require_layoutAnimationAutoworkletization(); var objectWorklets_1 = require_objectWorklets(); + var referencedWorklets_1 = require_referencedWorklets(); + var types_2 = require_types(); var workletSubstitution_12 = require_workletSubstitution(); - var reanimatedObjectHooks = /* @__PURE__ */ new Set([ - "useAnimatedScrollHandler", - ...Array.from(gestureHandlerAutoworkletization_1.gestureHandlerObjectHooks) - ]); + var reanimatedObjectHooks = /* @__PURE__ */ new Set(["useAnimatedScrollHandler"]); var reanimatedFunctionHooks = /* @__PURE__ */ new Set([ "useFrameCallback", "useAnimatedStyle", @@ -1244,7 +1195,6 @@ var require_autoworkletization = __commonJS({ ["runOnUIAsync", [0]], ["runOnRuntime", [1]], ["scheduleOnRuntime", [1]], - ...Array.from(gestureHandlerAutoworkletization_1.gestureHandlerObjectHooks).map((name) => [name, [0]]), ...Array.from(gestureHandlerAutoworkletization_1.gestureHandlerBuilderMethods).map((name) => [name, [0]]) ]); function processIfAutoworkletizableCallback(path, state) { @@ -1273,39 +1223,29 @@ var require_autoworkletization = __commonJS({ } function processArgs(args, state, acceptWorkletizableFunction, acceptObject) { args.forEach((arg) => { - (0, objectWorklets_1.tryProcessingNode)(arg, state, acceptWorkletizableFunction, acceptObject); + var _a; + const maybeWorklet = findWorklet(arg, acceptWorkletizableFunction, acceptObject); + if (!maybeWorklet || ((_a = maybeWorklet.getFunctionParent()) === null || _a === void 0 ? void 0 : _a.node.workletized)) { + return; + } + if ((0, types_2.isWorkletizableFunctionPath)(maybeWorklet)) { + (0, workletSubstitution_12.processWorklet)(maybeWorklet, state); + } else if ((0, types_2.isWorkletizableObjectPath)(maybeWorklet)) { + (0, objectWorklets_1.processWorkletizableObject)(maybeWorklet, state); + } }); } - } -}); - -// lib/bundleMode.js -var require_bundleMode = __commonJS({ - "lib/bundleMode.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.toggleBundleMode = toggleBundleMode; - var types_12 = require("@babel/types"); - function toggleBundleMode(path, state) { - var _a; - if (!state.opts.bundleMode || !((_a = state.filename) === null || _a === void 0 ? void 0 : _a.includes("workletRuntimeEntry"))) { - return; + function findWorklet(arg, acceptWorkletizableFunction, acceptObject) { + if (acceptWorkletizableFunction && (0, types_2.isWorkletizableFunctionPath)(arg)) { + return arg; } - const expressionPath = path.get("expression"); - if (!expressionPath.isAssignmentExpression()) { - return; + if (acceptObject && (0, types_2.isWorkletizableObjectPath)(arg)) { + return arg; } - const left = expressionPath.get("left"); - if (!left.isMemberExpression()) { - return; + if (arg.isIdentifier() && arg.isReferencedIdentifier()) { + return (0, referencedWorklets_1.findReferencedWorklet)(arg, acceptWorkletizableFunction, acceptObject); } - const object = left.get("object"); - const property = left.get("property"); - if (!object.isIdentifier() || object.node.name !== "globalThis" || !property.isIdentifier() || property.node.name !== "_WORKLETS_BUNDLE_MODE") { - return; - } - const right = expressionPath.get("right"); - right.replaceWith((0, types_12.booleanLiteral)(true)); + return void 0; } } }); @@ -1763,7 +1703,6 @@ var require_webOptimization = __commonJS({ // lib/plugin.js Object.defineProperty(exports, "__esModule", { value: true }); var autoworkletization_1 = require_autoworkletization(); -var bundleMode_1 = require_bundleMode(); var class_1 = require_class(); var contextObject_1 = require_contextObject(); var file_1 = require_file(); @@ -1816,9 +1755,6 @@ module.exports = function WorkletsBabelPlugin() { ClassDeclaration: { enter(path, state) { runWithTaggedExceptions(() => { - if (state.opts.disableWorkletClasses) { - return; - } (0, class_1.processIfWorkletClass)(path, state); }); } @@ -1830,13 +1766,6 @@ module.exports = function WorkletsBabelPlugin() { }); } }, - ExpressionStatement: { - enter(path, state) { - runWithTaggedExceptions(() => { - (0, bundleMode_1.toggleBundleMode)(path, state); - }); - } - }, JSXAttribute: { enter(path, state) { runWithTaggedExceptions(() => (0, inlineStylesWarning_1.processInlineStylesWarning)(path, state)); diff --git a/frontend-admin/node_modules/react-native-worklets/scripts/validate-react-native-version.js b/frontend-admin/node_modules/react-native-worklets/scripts/validate-react-native-version.js index c303a78d..6ff17ab5 100644 --- a/frontend-admin/node_modules/react-native-worklets/scripts/validate-react-native-version.js +++ b/frontend-admin/node_modules/react-native-worklets/scripts/validate-react-native-version.js @@ -38,6 +38,6 @@ for (const version of supportedRNVersions) { // eslint-disable-next-line reanimated/use-logger console.error( - `[Worklets] Your installed version of React Native (${reactNativeVersion}) is not compatible with installed version of Worklets (${workletsVersion}). See the documentation for the list of supported versions: https://docs.swmansion.com/react-native-worklets/docs/guides/compatibility/` + `[Worklets] React Native ${reactNativeVersion} version is not compatible with Worklets ${workletsVersion}` ); process.exit(1); diff --git a/frontend-admin/node_modules/react-native-worklets/scripts/worklets_utils.rb b/frontend-admin/node_modules/react-native-worklets/scripts/worklets_utils.rb index 57101382..a42a309e 100644 --- a/frontend-admin/node_modules/react-native-worklets/scripts/worklets_utils.rb +++ b/frontend-admin/node_modules/react-native-worklets/scripts/worklets_utils.rb @@ -57,7 +57,7 @@ end def worklets_assert_minimal_react_native_version(config) validate_react_native_version_script = File.expand_path(File.join(__dir__, 'validate-react-native-version.js')) unless system("node \"#{validate_react_native_version_script}\" #{config[:react_native_version]}") - raise "[Worklets] Your installed version of React Native is not compatible with installed version of Worklets. See the documentation for the list of supported versions: https://docs.swmansion.com/react-native-worklets/docs/guides/compatibility/" + raise "[Worklets] React Native version is not compatible with Worklets" end end diff --git a/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.native.ts b/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.native.ts deleted file mode 100644 index 9a12fada..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.native.ts +++ /dev/null @@ -1,275 +0,0 @@ -'use strict'; - -import { checkCppVersion } from '../debug/checkCppVersion'; -import { jsVersion } from '../debug/jsVersion'; -import { WorkletsError } from '../debug/WorkletsError'; -import type { SerializableRef, SynchronizableRef } from '../memory/types'; -import { RuntimeKind } from '../runtimeKind'; -import { WorkletsTurboModule } from '../specs'; -import type { WorkletRuntime } from '../types'; -import type { - IWorkletsModule, - WorkletsModuleProxy, -} from './workletsModuleProxy'; - -class NativeWorklets implements IWorkletsModule { - #workletsModuleProxy: WorkletsModuleProxy; - #serializableUndefined: SerializableRef; - #serializableNull: SerializableRef; - #serializableTrue: SerializableRef; - #serializableFalse: SerializableRef; - - constructor() { - globalThis._WORKLETS_VERSION_JS = jsVersion; - if ( - global.__workletsModuleProxy === undefined && - globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative - ) { - WorkletsTurboModule?.installTurboModule(); - } - if (global.__workletsModuleProxy === undefined) { - throw new WorkletsError( - `Native part of Worklets doesn't seem to be initialized. -See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#native-part-of-worklets-doesnt-seem-to-be-initialized for more details.` - ); - } - if (__DEV__ && globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { - checkCppVersion(); - } - this.#workletsModuleProxy = global.__workletsModuleProxy; - this.#serializableNull = this.#workletsModuleProxy.createSerializableNull(); - this.#serializableUndefined = - this.#workletsModuleProxy.createSerializableUndefined(); - this.#serializableTrue = - this.#workletsModuleProxy.createSerializableBoolean(true); - this.#serializableFalse = - this.#workletsModuleProxy.createSerializableBoolean(false); - } - - createSerializable( - value: TValue, - shouldPersistRemote: boolean, - nativeStateSource?: object - ) { - return this.#workletsModuleProxy.createSerializable( - value, - shouldPersistRemote, - nativeStateSource - ); - } - - createSerializableImport( - from: string, - to: string - ): SerializableRef { - return this.#workletsModuleProxy.createSerializableImport(from, to); - } - - createSerializableString(str: string) { - return this.#workletsModuleProxy.createSerializableString(str); - } - - createSerializableNumber(num: number) { - return this.#workletsModuleProxy.createSerializableNumber(num); - } - - createSerializableBoolean(bool: boolean) { - return bool ? this.#serializableTrue : this.#serializableFalse; - } - - createSerializableBigInt(bigInt: bigint) { - return this.#workletsModuleProxy.createSerializableBigInt(bigInt); - } - - createSerializableUndefined() { - return this.#serializableUndefined; - } - - createSerializableNull() { - return this.#serializableNull; - } - - createSerializableTurboModuleLike< - TProps extends object, - TProto extends object, - >(props: TProps, proto: TProto): SerializableRef { - return this.#workletsModuleProxy.createSerializableTurboModuleLike( - props, - proto - ); - } - - createSerializableObject( - obj: T, - shouldRetainRemote: boolean, - nativeStateSource?: object - ): SerializableRef { - return this.#workletsModuleProxy.createSerializableObject( - obj, - shouldRetainRemote, - nativeStateSource - ); - } - - createSerializableHostObject(obj: T) { - return this.#workletsModuleProxy.createSerializableHostObject(obj); - } - - createSerializableArray(array: unknown[], shouldRetainRemote: boolean) { - return this.#workletsModuleProxy.createSerializableArray( - array, - shouldRetainRemote - ); - } - - createSerializableMap( - keys: TKey[], - values: TValue[] - ): SerializableRef> { - return this.#workletsModuleProxy.createSerializableMap(keys, values); - } - - createSerializableSet( - values: TValues[] - ): SerializableRef> { - return this.#workletsModuleProxy.createSerializableSet(values); - } - - createSerializableInitializer(obj: object) { - return this.#workletsModuleProxy.createSerializableInitializer(obj); - } - - createSerializableFunction( - func: (...args: TArgs) => TReturn - ) { - return this.#workletsModuleProxy.createSerializableFunction(func); - } - - createSerializableWorklet(worklet: object, shouldPersistRemote: boolean) { - return this.#workletsModuleProxy.createSerializableWorklet( - worklet, - shouldPersistRemote - ); - } - - createCustomSerializable( - data: SerializableRef, - typeId: number - ): SerializableRef { - return this.#workletsModuleProxy.createCustomSerializable(data, typeId); - } - - registerCustomSerializable( - determine: SerializableRef, - pack: SerializableRef, - unpack: SerializableRef, - typeId: number - ): void { - this.#workletsModuleProxy.registerCustomSerializable( - determine, - pack, - unpack, - typeId - ); - } - - scheduleOnUI(serializable: SerializableRef) { - return this.#workletsModuleProxy.scheduleOnUI(serializable); - } - - executeOnUIRuntimeSync( - serializable: SerializableRef - ): TReturn { - return this.#workletsModuleProxy.executeOnUIRuntimeSync(serializable); - } - - createWorkletRuntime( - name: string, - initializer: SerializableRef<() => void>, - useDefaultQueue: boolean, - customQueue: object | undefined, - enableEventLoop: boolean - ) { - return this.#workletsModuleProxy.createWorkletRuntime( - name, - initializer, - useDefaultQueue, - customQueue, - enableEventLoop - ); - } - - scheduleOnRuntime( - workletRuntime: WorkletRuntime, - serializableWorklet: SerializableRef - ) { - return this.#workletsModuleProxy.scheduleOnRuntime( - workletRuntime, - serializableWorklet - ); - } - - createSynchronizable(value: TValue): SynchronizableRef { - return this.#workletsModuleProxy.createSynchronizable(value); - } - - synchronizableGetDirty( - synchronizableRef: SynchronizableRef - ): TValue { - return this.#workletsModuleProxy.synchronizableGetDirty(synchronizableRef); - } - - synchronizableGetBlocking( - synchronizableRef: SynchronizableRef - ): TValue { - return this.#workletsModuleProxy.synchronizableGetBlocking( - synchronizableRef - ); - } - - synchronizableSetBlocking( - synchronizableRef: SynchronizableRef, - value: SerializableRef - ) { - return this.#workletsModuleProxy.synchronizableSetBlocking( - synchronizableRef, - value - ); - } - - synchronizableLock( - synchronizableRef: SynchronizableRef - ): void { - return this.#workletsModuleProxy.synchronizableLock(synchronizableRef); - } - - synchronizableUnlock( - synchronizableRef: SynchronizableRef - ): void { - return this.#workletsModuleProxy.synchronizableUnlock(synchronizableRef); - } - - reportFatalErrorOnJS( - message: string, - stack: string, - name: string, - jsEngine: string - ) { - return this.#workletsModuleProxy.reportFatalErrorOnJS( - message, - stack, - name, - jsEngine - ); - } - - getStaticFeatureFlag(name: string): boolean { - return this.#workletsModuleProxy.getStaticFeatureFlag(name); - } - - setDynamicFeatureFlag(name: string, value: boolean) { - this.#workletsModuleProxy.setDynamicFeatureFlag(name, value); - } -} - -export const WorkletsModule: IWorkletsModule = new NativeWorklets(); diff --git a/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.ts b/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.ts index 9d7a1d6d..456dc34d 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/NativeWorklets.ts @@ -1,10 +1,256 @@ 'use strict'; -import type { IWorkletsModule } from './workletsModuleProxy'; - -export type { +import { RuntimeKind } from '../runtimeKind'; +import { WorkletsTurboModule } from '../specs'; +import type { SynchronizableRef } from '../synchronizable'; +import { checkCppVersion } from '../utils/checkCppVersion'; +import { jsVersion } from '../utils/jsVersion'; +import { WorkletsError } from '../WorkletsError'; +import type { SerializableRef, WorkletRuntime } from '../workletTypes'; +import type { IWorkletsModule, WorkletsModuleProxy, } from './workletsModuleProxy'; -export const WorkletsModule: IWorkletsModule = null!; +export function createNativeWorkletsModule(): IWorkletsModule { + return new NativeWorklets(); +} + +class NativeWorklets implements IWorkletsModule { + #workletsModuleProxy: WorkletsModuleProxy; + #serializableUndefined: SerializableRef; + #serializableNull: SerializableRef; + #serializableTrue: SerializableRef; + #serializableFalse: SerializableRef; + + constructor() { + globalThis._WORKLETS_VERSION_JS = jsVersion; + if ( + global.__workletsModuleProxy === undefined && + globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative + ) { + WorkletsTurboModule?.installTurboModule(); + } + if (global.__workletsModuleProxy === undefined) { + throw new WorkletsError( + `Native part of Worklets doesn't seem to be initialized. +See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#native-part-of-worklets-doesnt-seem-to-be-initialized for more details.` + ); + } + if (__DEV__) { + checkCppVersion(); + } + this.#workletsModuleProxy = global.__workletsModuleProxy; + this.#serializableNull = this.#workletsModuleProxy.createSerializableNull(); + this.#serializableUndefined = + this.#workletsModuleProxy.createSerializableUndefined(); + this.#serializableTrue = + this.#workletsModuleProxy.createSerializableBoolean(true); + this.#serializableFalse = + this.#workletsModuleProxy.createSerializableBoolean(false); + } + + createSerializable( + value: TValue, + shouldPersistRemote: boolean, + nativeStateSource?: object + ) { + return this.#workletsModuleProxy.createSerializable( + value, + shouldPersistRemote, + nativeStateSource + ); + } + + createSerializableImport( + from: string, + to: string + ): SerializableRef { + return this.#workletsModuleProxy.createSerializableImport(from, to); + } + + createSerializableString(str: string) { + return this.#workletsModuleProxy.createSerializableString(str); + } + + createSerializableNumber(num: number) { + return this.#workletsModuleProxy.createSerializableNumber(num); + } + + createSerializableBoolean(bool: boolean) { + return bool ? this.#serializableTrue : this.#serializableFalse; + } + + createSerializableBigInt(bigInt: bigint) { + return this.#workletsModuleProxy.createSerializableBigInt(bigInt); + } + + createSerializableUndefined() { + return this.#serializableUndefined; + } + + createSerializableNull() { + return this.#serializableNull; + } + + createSerializableTurboModuleLike< + TProps extends object, + TProto extends object, + >(props: TProps, proto: TProto): SerializableRef { + return this.#workletsModuleProxy.createSerializableTurboModuleLike( + props, + proto + ); + } + + createSerializableObject( + obj: T, + shouldRetainRemote: boolean, + nativeStateSource?: object + ): SerializableRef { + return this.#workletsModuleProxy.createSerializableObject( + obj, + shouldRetainRemote, + nativeStateSource + ); + } + + createSerializableHostObject(obj: T) { + return this.#workletsModuleProxy.createSerializableHostObject(obj); + } + + createSerializableArray(array: unknown[], shouldRetainRemote: boolean) { + return this.#workletsModuleProxy.createSerializableArray( + array, + shouldRetainRemote + ); + } + + createSerializableMap( + keys: TKey[], + values: TValue[] + ): SerializableRef> { + return this.#workletsModuleProxy.createSerializableMap(keys, values); + } + + createSerializableSet( + values: TValues[] + ): SerializableRef> { + return this.#workletsModuleProxy.createSerializableSet(values); + } + + createSerializableInitializer(obj: object) { + return this.#workletsModuleProxy.createSerializableInitializer(obj); + } + + createSerializableFunction( + func: (...args: TArgs) => TReturn + ) { + return this.#workletsModuleProxy.createSerializableFunction(func); + } + + createSerializableWorklet(worklet: object, shouldPersistRemote: boolean) { + return this.#workletsModuleProxy.createSerializableWorklet( + worklet, + shouldPersistRemote + ); + } + + scheduleOnUI(serializable: SerializableRef) { + return this.#workletsModuleProxy.scheduleOnUI(serializable); + } + + executeOnUIRuntimeSync( + serializable: SerializableRef + ): TReturn { + return this.#workletsModuleProxy.executeOnUIRuntimeSync(serializable); + } + + createWorkletRuntime( + name: string, + initializer: SerializableRef<() => void>, + useDefaultQueue: boolean, + customQueue: object | undefined, + enableEventLoop: boolean + ) { + return this.#workletsModuleProxy.createWorkletRuntime( + name, + initializer, + useDefaultQueue, + customQueue, + enableEventLoop + ); + } + + scheduleOnRuntime( + workletRuntime: WorkletRuntime, + serializableWorklet: SerializableRef + ) { + return this.#workletsModuleProxy.scheduleOnRuntime( + workletRuntime, + serializableWorklet + ); + } + + createSynchronizable(value: TValue): SynchronizableRef { + return this.#workletsModuleProxy.createSynchronizable(value); + } + + synchronizableGetDirty( + synchronizableRef: SynchronizableRef + ): TValue { + return this.#workletsModuleProxy.synchronizableGetDirty(synchronizableRef); + } + + synchronizableGetBlocking( + synchronizableRef: SynchronizableRef + ): TValue { + return this.#workletsModuleProxy.synchronizableGetBlocking( + synchronizableRef + ); + } + + synchronizableSetBlocking( + synchronizableRef: SynchronizableRef, + value: SerializableRef + ) { + return this.#workletsModuleProxy.synchronizableSetBlocking( + synchronizableRef, + value + ); + } + + synchronizableLock( + synchronizableRef: SynchronizableRef + ): void { + return this.#workletsModuleProxy.synchronizableLock(synchronizableRef); + } + + synchronizableUnlock( + synchronizableRef: SynchronizableRef + ): void { + return this.#workletsModuleProxy.synchronizableUnlock(synchronizableRef); + } + + reportFatalErrorOnJS( + message: string, + stack: string, + name: string, + jsEngine: string + ) { + return this.#workletsModuleProxy.reportFatalErrorOnJS( + message, + stack, + name, + jsEngine + ); + } + + getStaticFeatureFlag(name: string): boolean { + return this.#workletsModuleProxy.getStaticFeatureFlag(name); + } + + setDynamicFeatureFlag(name: string, value: boolean) { + this.#workletsModuleProxy.setDynamicFeatureFlag(name, value); + } +} diff --git a/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/workletsModuleProxy.ts b/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/workletsModuleProxy.ts index b7d9fb2f..22dd530c 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/workletsModuleProxy.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/WorkletsModule/workletsModuleProxy.ts @@ -1,7 +1,7 @@ 'use strict'; -import type { SerializableRef, SynchronizableRef } from '../memory/types'; -import type { WorkletRuntime } from '../types'; +import type { SynchronizableRef } from '../synchronizable'; +import type { SerializableRef, WorkletRuntime } from '../workletTypes'; /** Type of `__workletsModuleProxy` injected with JSI. */ export interface WorkletsModuleProxy { @@ -69,18 +69,6 @@ export interface WorkletsModuleProxy { shouldPersistRemote: boolean ): SerializableRef; - createCustomSerializable( - data: SerializableRef, - typeId: number - ): SerializableRef; - - registerCustomSerializable( - determine: SerializableRef, - pack: SerializableRef, - unpack: SerializableRef, - typeId: number - ): void; - scheduleOnUI(serializable: SerializableRef): void; executeOnUIRuntimeSync( diff --git a/frontend-admin/node_modules/react-native-worklets/src/callGuard.native.ts b/frontend-admin/node_modules/react-native-worklets/src/callGuard.native.ts deleted file mode 100644 index 04439c4c..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/callGuard.native.ts +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -import type { RNError } from './debug/errors'; - -/** Used only with debug builds. */ -export function callGuardDEV( - fn: (...args: Args) => ReturnValue, - ...args: Args -): ReturnValue | void { - 'worklet'; - try { - return fn(...args); - } catch (error) { - if (globalThis.__workletsModuleProxy) { - const { message, stack, name, jsEngine } = error as RNError; - globalThis.__workletsModuleProxy.reportFatalErrorOnJS( - message, - stack ?? '', - name ?? 'WorkletsError', - jsEngine ?? 'Worklets' - ); - } else { - throw error; - } - } -} - -export function setupCallGuard() { - 'worklet'; - if (!globalThis.__callGuardDEV) { - globalThis.__callGuardDEV = callGuardDEV; - } -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.native.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.native.ts deleted file mode 100644 index 7a8303b7..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.native.ts +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -import { RuntimeKind } from '../runtimeKind'; -import type { - IWorkletsErrorConstructor, - WorkletsError as IWorkletsError, -} from './types'; - -function WorkletsErrorConstructor(message?: string): IWorkletsError { - 'worklet'; - const prefix = '[Worklets]'; - - // eslint-disable-next-line reanimated/use-worklets-error - const errorInstance = new Error(message ? `${prefix} ${message}` : prefix); - errorInstance.name = `WorkletsError`; - return errorInstance as IWorkletsError; -} - -/** - * Registers WorkletsError in the global scope. Register only for Worklet - * runtimes. - */ -export function registerWorkletsError() { - 'worklet'; - if ((globalThis.__RUNTIME_KIND as RuntimeKind) !== RuntimeKind.ReactNative) { - (globalThis as Record).WorkletsError = - WorkletsErrorConstructor; - } -} - -export const WorkletsError = - WorkletsErrorConstructor as IWorkletsErrorConstructor; diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.ts deleted file mode 100644 index 9d2c5ffb..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/WorkletsError.ts +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -import type { - IWorkletsErrorConstructor, - WorkletsError as IWorkletsError, -} from './types'; - -function WorkletsErrorConstructor(message?: string): IWorkletsError { - const prefix = '[Worklets]'; - - // eslint-disable-next-line reanimated/use-worklets-error - const errorInstance = new Error(message ? `${prefix} ${message}` : prefix); - errorInstance.name = `WorkletsError`; - return errorInstance as IWorkletsError; -} - -export const WorkletsError = - WorkletsErrorConstructor as IWorkletsErrorConstructor; diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/checkCppVersion.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/checkCppVersion.ts deleted file mode 100644 index a7f8f0eb..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/checkCppVersion.ts +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -import { jsVersion } from './jsVersion'; -import { logger } from './logger'; -import { WorkletsError } from './WorkletsError'; - -export function checkCppVersion() { - const cppVersion = global._WORKLETS_VERSION_CPP; - if (cppVersion === undefined) { - logger.warn( - `Couldn't determine the version of the native part of Worklets. - See \`https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#couldnt-determine-the-version-of-the-native-part-of-worklets\` for more details.` - ); - return; - } - const ok = matchVersion(jsVersion, cppVersion); - if (!ok) { - throw new WorkletsError( - `Mismatch between JavaScript part and native part of Worklets (${jsVersion} vs ${cppVersion}). - See \`https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#mismatch-between-javascript-part-and-native-part-of-worklets\` for more details.` - ); - } -} - -export function matchVersion(version1: string, version2: string) { - if (version1.match(/^\d+\.\d+\.\d+$/) && version2.match(/^\d+\.\d+\.\d+$/)) { - // x.y.z, compare only major and minor, skip patch - const [major1, minor1] = version1.split('.'); - const [major2, minor2] = version2.split('.'); - return major1 === major2 && minor1 === minor2; - } else { - // alpha, beta or rc, compare everything - return version1 === version2; - } -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/errors.native.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/errors.native.ts deleted file mode 100644 index 93fc0a99..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/errors.native.ts +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -import type { WorkletStackDetails } from '../types'; -import { WorkletsError } from './WorkletsError'; - -const _workletStackDetails = new Map(); - -export function registerWorkletStackDetails( - hash: number, - stackDetails: WorkletStackDetails -) { - _workletStackDetails.set(hash, stackDetails); -} - -function getBundleOffset(error: Error): [string, number, number] { - const frame = error.stack?.split('\n')?.[0]; - if (frame) { - const parsedFrame = /@([^@]+):(\d+):(\d+)/.exec(frame); - if (parsedFrame) { - const [, file, line, col] = parsedFrame; - return [file, Number(line), Number(col)]; - } - } - return ['unknown', 0, 0]; -} - -function processStack(stack?: string): string | undefined { - if (stack === '' || stack === undefined) { - return undefined; - } - const workletStackEntries = stack.match(/worklet_(\d+):(\d+):(\d+)/g); - let result = stack; - workletStackEntries?.forEach((match) => { - const [, hash, origLine, origCol] = match.split(/:|_/).map(Number); - const errorDetails = _workletStackDetails.get(hash); - if (!errorDetails) { - return; - } - const [error, lineOffset, colOffset] = errorDetails; - const [bundleFile, bundleLine, bundleCol] = getBundleOffset(error); - const line = origLine + bundleLine + lineOffset; - const col = origCol + bundleCol + colOffset; - - result = result.replace(match, `${bundleFile}:${line}:${col}`); - }); - return result; -} - -export interface RNError extends Error { - jsEngine: string; -} - -/** - * Remote error is an error coming from a Worklet Runtime that we bubble up to - * the RN Runtime. - */ -export function reportFatalRemoteError( - { message, stack, name, jsEngine }: RNError, - force: boolean -): void { - const error = new WorkletsError() as RNError; - error.message = message; - error.stack = processStack(stack); - error.name = name; - error.jsEngine = jsEngine; - if (force) { - throw error; - } else { - // @ts-expect-error React Native's `ErrorUtils` are hidden from the global scope. - globalThis.ErrorUtils.reportFatalError(error); - } -} - -/** - * Registers `reportFatalRemoteError` function in global scope to allow to - * invoke it from C++. - */ -export function registerReportFatalRemoteError() { - globalThis.__reportFatalRemoteError = reportFatalRemoteError; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/jsVersion.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/jsVersion.ts deleted file mode 100644 index bdb7f9ba..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/jsVersion.ts +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -/** - * We hardcode the version of Worklets here in order to compare it with the - * version used to build the native part of the library in runtime. Remember to - * keep this in sync with the version declared in `package.json` - */ -export const jsVersion = '0.7.2'; diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/logger.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/logger.ts deleted file mode 100644 index 5d0a14a5..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/logger.ts +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const PREFIX = '[Worklets]'; - -function formatMessage(message: string) { - return `${PREFIX} ${message}`; -} - -export const logger = { - warn(message: string) { - console.warn(formatMessage(message)); - }, - error(message: string) { - console.error(formatMessage(message)); - }, -}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/debug/types.ts b/frontend-admin/node_modules/react-native-worklets/src/debug/types.ts deleted file mode 100644 index 03286ec9..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/debug/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -export type WorkletsError = Error & { name: 'Worklets' }; // signed type - -export interface IWorkletsErrorConstructor extends Error { - new (message?: string): WorkletsError; - (message?: string): WorkletsError; - readonly prototype: WorkletsError; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/deprecated.ts b/frontend-admin/node_modules/react-native-worklets/src/deprecated.ts index 3024a1e4..facaea9c 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/deprecated.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/deprecated.ts @@ -5,9 +5,9 @@ import { isSerializableRef, makeShareable, makeShareableCloneOnUIRecursive, -} from './memory/serializable'; -import { serializableMappingCache } from './memory/serializableMappingCache'; -import type { SerializableRef } from './memory/types'; +} from './serializable'; +import { serializableMappingCache } from './serializableMappingCache'; +import type { SerializableRef } from './workletTypes'; /** @deprecated Use {@link SerializableRef} instead. */ export type ShareableRef = SerializableRef; diff --git a/frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.native.ts b/frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.native.ts deleted file mode 100644 index c9afa8ca..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.native.ts +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; -import { logger } from '../debug/logger'; -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -import type { - DynamicFlagName, - DynamicFlagsType, - StaticFeatureFlagsSchema, -} from './types'; - -export const DynamicFlags: DynamicFlagsType = { - EXAMPLE_DYNAMIC_FLAG: true, - - init() { - Object.keys(DynamicFlags).forEach((key) => { - if (key !== 'init' && key !== 'setFlag' && key !== 'getFlag') { - WorkletsModule.setDynamicFeatureFlag( - key, - DynamicFlags[key as DynamicFlagName] - ); - } - }); - }, - setFlag(name, value) { - if (name in DynamicFlags) { - DynamicFlags[name] = value; - WorkletsModule.setDynamicFeatureFlag(name, value); - } else { - logger.warn( - `The feature flag: '${name}' no longer exists, you can safely remove invocation of \`setDynamicFeatureFlag('${name}')\` from your code.` - ); - } - }, - getFlag(name) { - if (name in DynamicFlags) { - return DynamicFlags[name]; - } else { - logger.warn( - `The feature flag: '${name}' no longer exists, you can safely remove invocation of \`getDynamicFeatureFlag('${name}')\` from your code.` - ); - return false; - } - }, -}; -DynamicFlags.init(); - -// Public API function to update a feature flag -export function setDynamicFeatureFlag( - name: DynamicFlagName, - value: boolean -): void { - DynamicFlags.setFlag(name, value); -} - -// Public API function to read a feature flag -export function getDynamicFeatureFlag(name: DynamicFlagName): boolean { - return DynamicFlags.getFlag(name); -} - -const staticFeatureFlags: Partial = {}; - -export function getStaticFeatureFlag( - name: keyof StaticFeatureFlagsSchema -): boolean { - if (name in staticFeatureFlags) { - return staticFeatureFlags[name]!; - } - const featureFlagValue = WorkletsModule.getStaticFeatureFlag(name); - staticFeatureFlags[name] = featureFlagValue; - return featureFlagValue; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.ts b/frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.ts deleted file mode 100644 index c14b8a7e..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/featureFlags/featureFlags.ts +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -import type { DynamicFlagName, StaticFeatureFlagsSchema } from './types'; - -export function getStaticFeatureFlag( - _name: keyof StaticFeatureFlagsSchema -): boolean { - return false; -} - -export function setDynamicFeatureFlag( - _name: DynamicFlagName, - _value: boolean -): void { - // no-op -} - -export function getDynamicFeatureFlag(_name: DynamicFlagName): boolean { - return false; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/featureFlags/types.ts b/frontend-admin/node_modules/react-native-worklets/src/featureFlags/types.ts deleted file mode 100644 index 1b66b80b..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/featureFlags/types.ts +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -import type StaticFeatureFlagsJSON from './staticFlags.json'; - -export type DynamicFlagsType = { - EXAMPLE_DYNAMIC_FLAG: boolean; - init(): void; - setFlag(name: DynamicFlagName, value: boolean): void; - getFlag(name: DynamicFlagName): boolean; -}; - -export type DynamicFlagName = keyof Omit< - Omit, - 'init' ->; - -/** - * This constant is needed for typechecking and preserving static typechecks in - * generated .d.ts files. Without it, the static flags resolve to an object - * without specific keys. - */ -export const DefaultStaticFeatureFlags = { - RUNTIME_TEST_FLAG: false, - IOS_DYNAMIC_FRAMERATE_ENABLED: false, -} as const satisfies typeof StaticFeatureFlagsJSON; - -export type StaticFeatureFlagsSchema = { - -readonly [K in keyof typeof DefaultStaticFeatureFlags]: boolean; -}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/index.ts b/frontend-admin/node_modules/react-native-worklets/src/index.ts index 7ce17d8b..795e96cb 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/index.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/index.ts @@ -1,51 +1,28 @@ 'use strict'; -import { init } from './initializers/initializers'; -import { bundleModeInit } from './initializers/workletRuntimeEntry'; +import './publicGlobals'; + +import { init } from './initializers'; +import { bundleModeInit } from './workletRuntimeEntry'; init(); -// @ts-expect-error We must trick the bundler to include -// the `workletRuntimeEntry` file the way it cannot optimize it out. -if (globalThis._ALWAYS_FALSE) { - // Bundle mode. - bundleModeInit(); -} - +export type { MakeShareableClone, ShareableRef } from './deprecated'; export { isShareableRef, makeShareable, - type MakeShareableClone, makeShareableCloneOnUIRecursive, makeShareableCloneRecursive, shareableMappingCache, - type ShareableRef, } from './deprecated'; -export { - getDynamicFeatureFlag, - getStaticFeatureFlag, - setDynamicFeatureFlag, -} from './featureFlags/featureFlags'; -export { isSynchronizable } from './memory/isSynchronizable'; -export { - createSerializable, - isSerializableRef, - registerCustomSerializable, -} from './memory/serializable'; -export { serializableMappingCache } from './memory/serializableMappingCache'; -export { createSynchronizable } from './memory/synchronizable'; -export type { - RegistrationData, - SerializableRef, - Synchronizable, - SynchronizableRef, -} from './memory/types'; +export { getStaticFeatureFlag, setDynamicFeatureFlag } from './featureFlags'; +export { isSynchronizable } from './isSynchronizable'; export { getRuntimeKind, RuntimeKind } from './runtimeKind'; -export { - createWorkletRuntime, - runOnRuntime, - scheduleOnRuntime, -} from './runtimes'; +export { createWorkletRuntime, runOnRuntime } from './runtimes'; +export { createSerializable, isSerializableRef } from './serializable'; +export { serializableMappingCache } from './serializableMappingCache'; +export type { Synchronizable } from './synchronizable'; +export { createSynchronizable } from './synchronizable'; export { callMicrotasks, executeOnUIRuntimeSync, @@ -58,14 +35,19 @@ export { // eslint-disable-next-line camelcase unstable_eventLoopTask, } from './threads'; +export { isWorkletFunction } from './workletFunction'; +export type { IWorkletsModule, WorkletsModuleProxy } from './WorkletsModule'; +export { WorkletsModule } from './WorkletsModule'; export type { + SerializableRef, WorkletFunction, WorkletRuntime, WorkletStackDetails, -} from './types'; -export { isWorkletFunction } from './workletFunction'; -export { WorkletsModule } from './WorkletsModule/NativeWorklets'; -export type { - IWorkletsModule, - WorkletsModuleProxy, -} from './WorkletsModule/workletsModuleProxy'; +} from './workletTypes'; + +// @ts-expect-error We must trick the bundler to include +// the `workletRuntimeEntry` file the way it cannot optimize it out. +if (globalThis._ALWAYS_FALSE) { + // Bundle mode. + bundleModeInit(); +} diff --git a/frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.native.ts b/frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.native.ts deleted file mode 100644 index 41b58868..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.native.ts +++ /dev/null @@ -1,238 +0,0 @@ -'use strict'; - -import { setupCallGuard } from '../callGuard'; -import { registerReportFatalRemoteError } from '../debug/errors'; -import { registerWorkletsError, WorkletsError } from '../debug/WorkletsError'; -import { bundleValueUnpacker } from '../memory/bundleUnpacker'; -import { __installUnpacker as installCustomSerializableUnpacker } from '../memory/customSerializableUnpacker'; -import { __installUnpacker as installSynchronizableUnpacker } from '../memory/synchronizableUnpacker'; -import { setupSetImmediate } from '../runLoop/common/setImmediatePolyfill'; -import { setupSetInterval } from '../runLoop/common/setIntervalPolyfill'; -import { setupRequestAnimationFrame } from '../runLoop/uiRuntime/requestAnimationFrame'; -import { setupSetTimeout } from '../runLoop/uiRuntime/setTimeoutPolyfill'; -import { RuntimeKind } from '../runtimeKind'; -import { runOnUISync, scheduleOnRN, setupMicrotasks } from '../threads'; -import type { ValueUnpacker } from '../types'; -import { isWorkletFunction } from '../workletFunction'; -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; - -if (globalThis.__RUNTIME_KIND === undefined) { - // The only runtime that doesn't have `__RUNTIME_KIND` preconfigured - // is the RN Runtime. We must set it as soon as possible. - globalThis.__RUNTIME_KIND = RuntimeKind.ReactNative; -} - -let capturableConsole: typeof console; - -/** - * Currently there seems to be a bug in the JSI layer which causes a crash when - * we try to copy some of the console methods, i.e. `clear` or `dirxml`. - * - * The crash happens only in React Native 0.75. It's not reproducible in neither - * 0.76 nor 0.74. It also happens only in the configuration of a debug app and - * production bundle. - * - * I haven't yet discovered what exactly causes the crash. It's tied to the - * console methods sometimes being `HostFunction`s. Therefore, as a workaround - * we don't copy the methods as they are in the original console object, we copy - * JavaScript wrappers instead. - */ -export function getMemorySafeCapturableConsole(): typeof console { - if (capturableConsole) { - return capturableConsole; - } - - const consoleCopy = Object.fromEntries( - Object.entries(console).map(([methodName, method]) => { - const methodWrapper = function methodWrapper(...args: unknown[]) { - return method(...args); - }; - if (method.name) { - /** - * Set the original method name as the wrapper name if available. - * - * It might be unnecessary but if we want to fully mimic the console - * object we should take into the account the fact some code might rely - * on the method name. - */ - Object.defineProperty(methodWrapper, 'name', { - value: method.name, - writable: false, - }); - } - return [methodName, methodWrapper]; - }) - ); - - capturableConsole = consoleCopy as unknown as typeof console; - - return consoleCopy as unknown as typeof console; -} - -export function setupConsole(boundCapturableConsole: typeof console) { - 'worklet'; - // @ts-ignore TypeScript doesn't like that there are missing methods in console object, but we don't provide all the methods for the UI runtime console version - globalThis.console = { - assert: (...args) => scheduleOnRN(boundCapturableConsole.assert, ...args), - debug: (...args) => scheduleOnRN(boundCapturableConsole.debug, ...args), - log: (...args) => scheduleOnRN(boundCapturableConsole.log, ...args), - warn: (...args) => scheduleOnRN(boundCapturableConsole.warn, ...args), - error: (...args) => scheduleOnRN(boundCapturableConsole.error, ...args), - info: (...args) => scheduleOnRN(boundCapturableConsole.info, ...args), - }; -} - -let initialized = false; - -export function init() { - if (initialized) { - return; - } - initialized = true; - - initializeRuntime(); - - if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - initializeWorkletRuntime(); - } else { - initializeRNRuntime(); - installRNBindingsOnUIRuntime(); - } -} - -/** A function that should be run on any kind of runtime. */ -function initializeRuntime() { - if (globalThis._WORKLETS_BUNDLE_MODE) { - globalThis.__valueUnpacker = bundleValueUnpacker as ValueUnpacker; - } - installSynchronizableUnpacker(); - installCustomSerializableUnpacker(); -} - -/** A function that should be run only on React Native runtime. */ -function initializeRNRuntime() { - if (__DEV__) { - const testWorklet = () => { - 'worklet'; - }; - if (!isWorkletFunction(testWorklet)) { - throw new WorkletsError( - `Failed to create a worklet. See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#failed-to-create-a-worklet for more details.` - ); - } - } - - registerReportFatalRemoteError(); -} - -/** A function that should be run only on Worklet runtimes. */ -function initializeWorkletRuntime() { - if (globalThis._WORKLETS_BUNDLE_MODE) { - setupCallGuard(); - - if (__DEV__) { - /* - * Temporary workaround for Metro bundler. We must implement a dummy - * Refresh module to prevent Metro from throwing irrelevant errors. - */ - const Refresh = new Proxy( - {}, - { - get() { - return () => {}; - }, - } - ); - - globalThis.__r.Refresh = Refresh; - - /* Gracefully handle unwanted imports from React Native. */ - const modules = require.getModules(); - const ReactNativeModuleId = require.resolveWeak('react-native'); - - const factory = function ( - _global: unknown, - _require: unknown, - _importDefault: unknown, - _importAll: unknown, - module: Record, - _exports: unknown, - _dependencyMap: unknown - ) { - module.exports = new Proxy( - {}, - { - get: function get(_target, prop) { - globalThis.console.warn( - `You tried to import '${String(prop)}' from 'react-native' module on a Worklet Runtime. Using 'react-native' module on a Worklet Runtime is not allowed.` - ); - return { - get() { - return undefined; - }, - }; - }, - } - ); - }; - - const mod = { - dependencyMap: [], - factory, - hasError: false, - importedAll: {}, - importedDefault: {}, - isInitialized: false, - publicModule: { - exports: {}, - }, - }; - - modules.set(ReactNativeModuleId, mod); - } - } -} - -/** - * A function that should be run on the RN Runtime to configure the UI Runtime - * with callback bindings. - */ -function installRNBindingsOnUIRuntime() { - if (!WorkletsModule) { - throw new WorkletsError( - 'Worklets are trying to initialize the UI runtime without a valid WorkletsModule' - ); - } - - const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole(); - - if (!globalThis._WORKLETS_BUNDLE_MODE) { - /** In bundle mode Runtimes setup their callGuard themselves. */ - runOnUISync(setupCallGuard); - - /** - * Register WorkletsError in the UI runtime global scope. (we are using - * `executeOnUIRuntimeSync` here to make sure that the changes are applied - * before any async operations are executed on the UI runtime). - * - * There's no need to register the error in bundle mode. - */ - runOnUISync(registerWorkletsError); - } - - runOnUISync(() => { - 'worklet'; - - setupConsole(runtimeBoundCapturableConsole); - /** - * TODO: Move `setupMicrotasks` and `setupRequestAnimationFrame` to a - * separate function once we have a better way to distinguish between - * Worklet Runtimes. - */ - setupMicrotasks(); - setupRequestAnimationFrame(); - setupSetTimeout(); - setupSetImmediate(); - setupSetInterval(); - }); -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.ts b/frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.ts deleted file mode 100644 index 3ba7bc91..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/initializers/initializers.ts +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -import { IS_JEST } from '../platformChecker'; -import { mockedRequestAnimationFrame } from '../runLoop/uiRuntime/mockedRequestAnimationFrame'; -import { RuntimeKind } from '../runtimeKind'; - -export function init() { - globalThis._WORKLET = false; - globalThis.__RUNTIME_KIND = RuntimeKind.ReactNative; - globalThis._log = console.log; - globalThis._getAnimationTimestamp = () => performance.now(); - if (IS_JEST) { - // requestAnimationFrame react-native jest's setup is incorrect as it polyfills - // the method directly using setTimeout, therefore the callback doesn't get the - // expected timestamp as the only argument: https://github.com/facebook/react-native/blob/main/packages/react-native/jest/setup.js#L28 - // We override this setup here to make sure that callbacks get the proper timestamps - // when executed. For non-jest environments we define requestAnimationFrame in setupRequestAnimationFrame - // @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number - globalThis.requestAnimationFrame = mockedRequestAnimationFrame; - } -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.native.ts b/frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.native.ts deleted file mode 100644 index d1a52ad6..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.native.ts +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -import { WorkletsError } from '../debug/WorkletsError'; -import { RuntimeKind } from '../runtimeKind'; -import { init } from './initializers'; - -/** - * This function is an entry point for Worklet Runtimes. We can use it to setup - * necessary tools, like the ValueUnpacker. - * - * We must throw an error at the end of this function to prevent the bundle to - * continue executing. This is because the next module to be ran would be the - * React Native one, and it would break the Worklet Runtime if initialized. The - * error is caught in C++ code. - * - * This function has no effect on the RN Runtime beside setting the - * `_WORKLETS_BUNDLE_MODE` flag. - */ -export function bundleModeInit() { - // Worklets Babel Plugin replaces `false` with `true` here - // when Bundle Mode is enabled. - globalThis._WORKLETS_BUNDLE_MODE = false; - - if (!globalThis._WORKLETS_BUNDLE_MODE) { - return; - } - - const runtimeKind = globalThis.__RUNTIME_KIND; - if (runtimeKind && runtimeKind !== RuntimeKind.ReactNative) { - /** - * We shouldn't call `init()` on RN Runtime here, as it would initialize our - * module before React Native has configured the RN Runtime. - */ - init(); - throw new WorkletsError('Worklets initialized successfully'); - } -} - -bundleModeInit(); diff --git a/frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.ts b/frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.ts deleted file mode 100644 index 1fd651da..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/initializers/workletRuntimeEntry.ts +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -export function bundleModeInit() { - // no-op -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/bundleUnpacker.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/bundleUnpacker.native.ts deleted file mode 100644 index 5eba194f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/bundleUnpacker.native.ts +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -import { logger } from '../debug/logger'; -import { WorkletsError } from '../debug/WorkletsError'; -import type { WorkletFactory, WorkletFunction } from '../types'; - -const handleCache = new WeakMap(); - -export function bundleValueUnpacker( - objectToUnpack: ObjectToUnpack, - category?: string, - remoteFunctionName?: string -): unknown { - const workletHash = objectToUnpack.__workletHash; - if (workletHash !== undefined) { - return getWorklet(workletHash, objectToUnpack.__closure); - } else if (objectToUnpack.__init !== undefined) { - let value = handleCache.get(objectToUnpack); - if (value === undefined) { - value = objectToUnpack.__init(); - handleCache.set(objectToUnpack, value); - } - return value; - } else if (category === 'RemoteFunction') { - const remoteFunctionHolder = () => { - const label = remoteFunctionName - ? `function \`${remoteFunctionName}\`` - : 'anonymous function'; - throw new WorkletsError(`Tried to synchronously call a non-worklet ${label} on the UI thread. -See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.`); - }; - remoteFunctionHolder.__remoteFunction = objectToUnpack; - return remoteFunctionHolder; - } else { - throw new WorkletsError( - `Data type in category "${category}" not recognized by value unpacker: "${globalThis._toString( - objectToUnpack - )}".` - ); - } -} - -function getWorklet( - workletHash: number, - closureVariables: Record -): WorkletFunction | undefined { - let worklet; - if (__DEV__) { - try { - worklet = getWorkletFromMetroRequire(workletHash, closureVariables); - } catch (_e) { - logger.error( - 'Unable to resolve worklet with hash ' + - workletHash + - '. Try reloading the app.' - ); - } - } else { - worklet = getWorkletFromMetroRequire(workletHash, closureVariables); - } - return worklet; -} - -const metroRequire = globalThis.__r; - -function getWorkletFromMetroRequire( - workletHash: number, - closureVariables: Record -): WorkletFunction { - const factory = metroRequire(workletHash).default as WorkletFactory; - return factory(closureVariables); -} - -interface ObjectToUnpack extends WorkletFunction { - _recur: unknown; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/customSerializableUnpacker.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/customSerializableUnpacker.native.ts deleted file mode 100644 index ad362d83..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/customSerializableUnpacker.native.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable reanimated/use-worklets-error */ -'use strict'; - -export function __installUnpacker() { - if (!globalThis.__customSerializationRegistry) { - globalThis.__customSerializationRegistry = - [] as typeof globalThis.__customSerializationRegistry; - } - const registry = globalThis.__customSerializationRegistry; - - function customSerializableUnpacker(value: TValue, typeId: number) { - const data = registry[typeId]; - if (!data) { - throw new Error( - `[Worklets] No custom serializable registered for type ID ${typeId}.` - ); - } - - return data.unpack(value as object); - } - - globalThis.__customSerializableUnpacker = - customSerializableUnpacker as CustomSerializableUnpacker; -} - -export type CustomSerializableUnpacker = ( - object: unknown, - typeId: number -) => unknown; diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.native.ts deleted file mode 100644 index 4f3b9fe5..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.native.ts +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -import type { Synchronizable } from './types'; - -export function isSynchronizable( - value: unknown -): value is Synchronizable { - 'worklet'; - return ( - typeof value === 'object' && - value !== null && - '__synchronizableRef' in value && - value.__synchronizableRef === true - ); -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.ts deleted file mode 100644 index 7c7c6979..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/isSynchronizable.ts +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -import { WorkletsError } from '../debug/WorkletsError'; -import type { Synchronizable } from './types'; - -export function isSynchronizable( - _value: unknown -): _value is Synchronizable { - throw new WorkletsError('`isSynchronizable` is not supported on web.'); -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/serializable.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/serializable.native.ts deleted file mode 100644 index 1b5f5790..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/serializable.native.ts +++ /dev/null @@ -1,897 +0,0 @@ -'use strict'; - -import { registerWorkletStackDetails } from '../debug/errors'; -import { jsVersion } from '../debug/jsVersion'; -import { logger } from '../debug/logger'; -import { WorkletsError } from '../debug/WorkletsError'; -import { getRuntimeKind, RuntimeKind } from '../runtimeKind'; -import type { WorkletFunction, WorkletImport } from '../types'; -import { isWorkletFunction } from '../workletFunction'; -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -import { isSynchronizable } from './isSynchronizable'; -import { - serializableMappingCache, - serializableMappingFlag, -} from './serializableMappingCache'; -import type { - FlatSerializableRef, - RegistrationData, - SerializableRef, - SerializationData, - Synchronizable, -} from './types'; - -const MAGIC_KEY = 'REANIMATED_MAGIC_KEY'; - -function isHostObject(value: NonNullable) { - 'worklet'; - // We could use JSI to determine whether an object is a host object, however - // the below workaround works well and is way faster than an additional JSI call. - // We use the fact that host objects have broken implementation of `hasOwnProperty` - // and hence return true for all `in` checks regardless of the key we ask for. - return MAGIC_KEY in value; -} - -export function isSerializableRef( - value: unknown -): value is SerializableRef { - 'worklet'; - return ( - typeof value === 'object' && - value !== null && - '__serializableRef' in value && - value.__serializableRef === true - ); -} - -function isPlainJSObject(object: object): object is Record { - 'worklet'; - return Object.getPrototypeOf(object) === Object.prototype; -} - -function isTurboModuleLike(object: object): object is Record { - return isHostObject(Object.getPrototypeOf(object)); -} - -function getFromCache(value: object) { - const cached = serializableMappingCache.get(value); - if (cached === serializableMappingFlag) { - // This means that `value` was already a clone and we should return it as is. - return value; - } - return cached; -} - -// The below object is used as a replacement for objects that cannot be transferred -// as serializable values. In createSerializable we detect if an object is of -// a plain Object.prototype and only allow such objects to be transferred. This lets -// us avoid all sorts of react internals from leaking into the UI runtime. To make it -// possible to catch errors when someone actually tries to access such object on the UI -// runtime, we use the below Proxy object which is instantiated on the UI runtime and -// throws whenever someone tries to access its fields. -const INACCESSIBLE_OBJECT = { - __init: () => { - 'worklet'; - return new Proxy( - {}, - { - get: (_: unknown, prop: string | symbol) => { - if ( - prop === '_isReanimatedSharedValue' || - prop === '__remoteFunction' || - prop === '__synchronizableRef' - ) { - // not very happy about this check here, but we need to allow for - // "inaccessible" objects to be tested with isSerializableRef check - // as it is being used in the mappers when extracting inputs recursively - // as well as with isRemoteFunction when cloning objects recursively. - // Apparently we can't check if a key exists there as HostObjects always - // return true for such tests, so the only possibility for us is to - // actually access that key and see if it is set to true. We therefore - // need to allow for this key to be accessed here. - return false; - } - throw new WorkletsError( - `Trying to access property \`${String( - prop - )}\` of an object which cannot be sent to the UI runtime.` - ); - }, - set: () => { - throw new WorkletsError( - 'Trying to write to an object which cannot be sent to the UI runtime.' - ); - }, - } - ); - }, -}; - -const VALID_ARRAY_VIEWS_NAMES = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array', - 'BigInt64Array', - 'BigUint64Array', - 'DataView', -]; - -const DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD = 30; -// Below variable stores object that we process in createSerializable at the specified depth. -// We use it to check if later on the function reenters with the same object -let processedObjectAtThresholdDepth: unknown; - -export function createSerializable( - value: TValue, - shouldPersistRemote = false, - depth = 0 -): SerializableRef { - detectCyclicObject(value, depth); - - const isObject = typeof value === 'object'; - const isFunction = typeof value === 'function'; - - if (typeof value === 'string') { - return cloneString(value) as SerializableRef; - } - - if (typeof value === 'number') { - return cloneNumber(value) as SerializableRef; - } - - if (typeof value === 'boolean') { - return cloneBoolean(value) as SerializableRef; - } - - if (typeof value === 'bigint') { - return cloneBigInt(value) as SerializableRef; - } - - if (value === undefined) { - return cloneUndefined() as SerializableRef; - } - - if (value === null) { - return cloneNull() as SerializableRef; - } - - if ((!isObject && !isFunction) || value === null) { - return clonePrimitive(value, shouldPersistRemote); - } - - const cached = getFromCache(value); - if (cached !== undefined) { - return cached as SerializableRef; - } - - if (Array.isArray(value)) { - return cloneArray(value, shouldPersistRemote, depth); - } - if ( - globalThis._WORKLETS_BUNDLE_MODE && - isFunction && - (value as WorkletImport).__bundleData - ) { - return cloneImport(value as WorkletImport) as SerializableRef; - } - if (isFunction && !isWorkletFunction(value)) { - return cloneRemoteFunction(value); - } - // RN has introduced a new representation of TurboModules as a JS object whose prototype is the host object - // More details: https://github.com/facebook/react-native/blob/main/packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp#L182 - if (isTurboModuleLike(value)) { - return cloneTurboModuleLike(value, shouldPersistRemote, depth); - } - if (isHostObject(value)) { - return cloneHostObject(value); - } - if (isPlainJSObject(value) && value.__init) { - return cloneInitializer( - value, - shouldPersistRemote, - depth - ) as SerializableRef; - } - if (isPlainJSObject(value) && value.__workletContextObjectFactory) { - return cloneContextObject(value); - } - if ((isPlainJSObject(value) || isFunction) && isWorkletFunction(value)) { - return cloneWorklet(value, shouldPersistRemote, depth); - } - if (isSynchronizable(value)) { - return cloneSynchronizable(value) as SerializableRef; - } - if (isPlainJSObject(value) || isFunction) { - return clonePlainJSObject(value, shouldPersistRemote, depth); - } - if (value instanceof Set) { - return cloneSet(value); - } - if (value instanceof Map) { - return cloneMap(value); - } - if (value instanceof RegExp) { - return cloneRegExp(value); - } - if (value instanceof Error) { - return cloneError(value); - } - if (value instanceof ArrayBuffer) { - return cloneArrayBuffer(value, shouldPersistRemote); - } - if (ArrayBuffer.isView(value)) { - // typed array (e.g. Int32Array, Uint8ClampedArray) or DataView - return cloneArrayBufferView(value); - } - for (let i = 0; i < customSerializationRegistry.length; i++) { - const { determine, pack } = customSerializationRegistry[i]; - if (determine(value)) { - return cloneCustom(value, pack, i) as SerializableRef; - } - } - return inaccessibleObject(value); -} - -if (globalThis._WORKLETS_BUNDLE_MODE) { - // TODO: Do it programmatically. - createSerializable.__bundleData = { - imported: 'createSerializable', - source: require.resolveWeak('react-native-worklets'), - }; -} - -if (!globalThis.__customSerializationRegistry) { - globalThis.__customSerializationRegistry = - [] as typeof globalThis.__customSerializationRegistry; -} -const customSerializationRegistry = globalThis.__customSerializationRegistry; - -/** - * `registerCustomSerializable` lets you register your own pre-serialization and - * post-deserialization logic. This is necessary for objects with prototypes - * different than just `Object.prototype` or some other built-in prototypes like - * `Map` etc. Worklets can't handle such objects by default to convert into - * [Serializables](https://docs.swmansion.com/react-native-worklets/docs/memory/serializable) - * hence you need to register them as **Custom Serializables**. This way you can - * tell Worklets how to transfer your custom data structures between different - * Runtimes without manually serializing and deserializing them every time. - * - * @param registrationData - The registration data for the custom serializable - - * {@link RegistrationData} - * @see https://docs.swmansion.com/react-native-worklets/docs/memory/registerCustomSerializable/ - */ -export function registerCustomSerializable< - TValue extends object, - TPacked extends object, ->(registrationData: RegistrationData) { - if (__DEV__ && getRuntimeKind() !== RuntimeKind.ReactNative) { - throw new WorkletsError( - 'registerCustomSerializable can be used only on React Native runtime.' - ); - } - - const { name, determine, pack, unpack } = registrationData; - - if (__DEV__) { - verifyRegistrationData(determine, pack, unpack); - } - if (customSerializationRegistry.some((data) => data.name === name)) { - if (__DEV__) { - console.warn( - `Custom serializable with name "${name}" is already registered. Duplicate registration is ignored.` - ); - } - return; - } - - customSerializationRegistry.push( - registrationData as unknown as SerializationData - ); - - WorkletsModule.registerCustomSerializable( - createSerializable(determine), - createSerializable(pack), - createSerializable(unpack), - customSerializationRegistry.length - 1 - ); -} - -function verifyRegistrationData( - determine: unknown, - pack: unknown, - unpack: unknown -) { - if (!isWorkletFunction(determine)) { - throw new WorkletsError( - 'The "determine" function provided to registerCustomSerializable must be a worklet.' - ); - } - if (!isWorkletFunction(pack)) { - throw new WorkletsError( - 'The "pack" function provided to registerCustomSerializable must be a worklet.' - ); - } - if (!isWorkletFunction(unpack)) { - throw new WorkletsError( - 'The "unpack" function provided to registerCustomSerializable must be a worklet.' - ); - } -} - -function detectCyclicObject(value: unknown, depth: number) { - if (depth >= DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) { - // if we reach certain recursion depth we suspect that we are dealing with a cyclic object. - // this type of objects are not supported and cannot be transferred as serializable, so we - // implement a simple detection mechanism that remembers the value at a given depth and - // tests whether we try reenter this method later on with the same value. If that happens - // we throw an appropriate error. - if (depth === DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) { - processedObjectAtThresholdDepth = value; - } else if (value === processedObjectAtThresholdDepth) { - throw new WorkletsError( - 'Trying to convert a cyclic object to a serializable. This is not supported.' - ); - } - } else { - processedObjectAtThresholdDepth = undefined; - } -} - -function clonePrimitive( - value: T, - shouldPersistRemote: boolean -): SerializableRef { - return WorkletsModule.createSerializable(value, shouldPersistRemote); -} - -function cloneString(value: string): SerializableRef { - return WorkletsModule.createSerializableString(value); -} - -function cloneNumber(value: number): SerializableRef { - return WorkletsModule.createSerializableNumber(value); -} - -function cloneBoolean(value: boolean): SerializableRef { - return WorkletsModule.createSerializableBoolean(value); -} - -function cloneBigInt(value: bigint): SerializableRef { - return WorkletsModule.createSerializableBigInt(value); -} - -function cloneUndefined(): SerializableRef { - return WorkletsModule.createSerializableUndefined(); -} - -function cloneNull(): SerializableRef { - return WorkletsModule.createSerializableNull(); -} - -function cloneObjectProperties( - value: T, - shouldPersistRemote: boolean, - depth: number -): Record { - const clonedProps: Record = {}; - for (const [key, element] of Object.entries(value)) { - // We don't need to clone __initData field as it contains long strings - // representing the worklet code, source map, and location, and we will - // serialize/deserialize it once. - if (key === '__initData' && clonedProps.__initData !== undefined) { - continue; - } - clonedProps[key] = createSerializable( - element, - shouldPersistRemote, - depth + 1 - ); - } - return clonedProps; -} - -function cloneInitializer( - value: object, - shouldPersistRemote = false, - depth = 0 -): SerializableRef { - const clonedProps: Record = cloneObjectProperties( - value, - shouldPersistRemote, - depth - ); - return WorkletsModule.createSerializableInitializer(clonedProps); -} - -function cloneArray( - value: T, - shouldPersistRemote: boolean, - depth: number -): SerializableRef { - const clonedElements = value.map((element) => - createSerializable(element, shouldPersistRemote, depth + 1) - ); - const clone = WorkletsModule.createSerializableArray( - clonedElements, - shouldPersistRemote - ) as SerializableRef; - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - freezeObjectInDev(value); - return clone; -} - -function cloneRemoteFunction( - value: (...args: TArgs) => TReturn -): SerializableRef { - const clone = WorkletsModule.createSerializableFunction(value); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - freezeObjectInDev(value); - return clone; -} - -function cloneHostObject(value: T): SerializableRef { - // for host objects we pass the reference to the object as serializable and - // then recreate new host object wrapping the same instance on the UI thread. - // there is no point of iterating over keys as we do for regular objects. - const clone = WorkletsModule.createSerializableHostObject(value); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - return clone; -} - -function cloneWorklet( - value: TValue, - shouldPersistRemote: boolean, - depth: number -): SerializableRef { - if (__DEV__) { - const babelVersion = (value as WorkletFunction).__pluginVersion; - if (babelVersion !== undefined && babelVersion !== jsVersion) { - throw new WorkletsError( - `Mismatch between JavaScript code version and Worklets Babel plugin version (${jsVersion} vs. ${babelVersion}). - See \`https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#mismatch-between-javascript-code-version-and-worklets-babel-plugin-version\` for more details. - Offending code was: \`${getWorkletCode(value)}\`` - ); - } - registerWorkletStackDetails( - value.__workletHash, - (value as WorkletFunction).__stackDetails! - ); - } - if ((value as WorkletFunction).__stackDetails) { - // `Error` type of value cannot be copied to the UI thread, so we - // remove it after we handled it in dev mode or delete it to ignore it in production mode. - // Not removing this would cause an infinite loop in production mode and it just - // seems more elegant to handle it this way. - delete (value as WorkletFunction).__stackDetails; - } - const clonedProps: Record = cloneObjectProperties( - value, - true, - depth - ); - // to save on transferring static __initData field of worklet structure - // we request serializable value to persist its UI counterpart. This means - // that the __initData field that contains long strings representing the - // worklet code, source map, and location, will always be - // serialized/deserialized once. - clonedProps.__initData = createSerializable( - value.__initData, - true, - depth + 1 - ); - - const clone = WorkletsModule.createSerializableWorklet( - clonedProps, - // TODO: Check after refactor if we can remove shouldPersistRemote parameter (imho it's redundant here since worklets are always persistent) - // retain all worklets - true - ) as SerializableRef; - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - freezeObjectInDev(value); - return clone; -} - -/** - * TurboModuleLike objects are JS objects that have a TurboModule as their - * prototype. - */ -function cloneTurboModuleLike( - value: TValue, - shouldPersistRemote: boolean, - depth: number -): SerializableRef { - const proto = Object.getPrototypeOf(value); - const clonedProps = cloneObjectProperties(value, shouldPersistRemote, depth); - const clone = WorkletsModule.createSerializableTurboModuleLike( - clonedProps, - proto - ) as SerializableRef; - return clone; -} - -function cloneContextObject( - value: TValue -): SerializableRef { - const workletContextObjectFactory = (value as Record) - .__workletContextObjectFactory as () => TValue; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - return workletContextObjectFactory(); - }, - }); - serializableMappingCache.set(value, handle); - return handle as SerializableRef; -} - -function clonePlainJSObject( - value: TValue, - shouldPersistRemote: boolean, - depth: number -): SerializableRef { - const clonedProps: Record = cloneObjectProperties( - value, - shouldPersistRemote, - depth - ); - const clone = WorkletsModule.createSerializableObject( - clonedProps, - shouldPersistRemote, - value - ) as SerializableRef; - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - freezeObjectInDev(value); - return clone; -} - -function cloneMap>( - value: TValue -): SerializableRef { - const clonedKeys: unknown[] = []; - const clonedValues: unknown[] = []; - for (const [key, element] of value.entries()) { - clonedKeys.push(createSerializable(key)); - clonedValues.push(createSerializable(element)); - } - const clone = WorkletsModule.createSerializableMap( - clonedKeys, - clonedValues - ) as SerializableRef; - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - freezeObjectInDev(value); - return clone; -} - -function cloneSet>( - value: TValue -): SerializableRef { - const clonedElements: unknown[] = []; - for (const element of value) { - clonedElements.push(createSerializable(element)); - } - const clone = WorkletsModule.createSerializableSet( - clonedElements - ) as SerializableRef; - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - freezeObjectInDev(value); - return clone; -} - -function cloneRegExp( - value: TValue -): SerializableRef { - const pattern = value.source; - const flags = value.flags; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - return new RegExp(pattern, flags); - }, - }) as unknown as SerializableRef; - serializableMappingCache.set(value, handle); - - return handle; -} - -function cloneError( - value: TValue -): SerializableRef { - const { name, message, stack } = value; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - // eslint-disable-next-line reanimated/use-worklets-error - const error = new Error(); - error.name = name; - error.message = message; - error.stack = stack; - return error; - }, - }); - serializableMappingCache.set(value, handle); - return handle as unknown as SerializableRef; -} - -function cloneArrayBuffer( - value: T, - shouldPersistRemote: boolean -): SerializableRef { - const clone = WorkletsModule.createSerializable( - value, - shouldPersistRemote, - value - ); - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - return clone; -} - -function cloneArrayBufferView( - value: TValue -): SerializableRef { - const buffer = value.buffer; - const typeName = value.constructor.name; - const handle = cloneInitializer({ - __init: () => { - 'worklet'; - if (!VALID_ARRAY_VIEWS_NAMES.includes(typeName)) { - throw new WorkletsError(`Invalid array view name \`${typeName}\`.`); - } - const constructor = global[typeName as keyof typeof global]; - if (constructor === undefined) { - throw new WorkletsError(`Constructor for \`${typeName}\` not found.`); - } - return new constructor(buffer); - }, - }) as unknown as SerializableRef; - serializableMappingCache.set(value, handle); - - return handle; -} - -function cloneSynchronizable( - value: Synchronizable -): SerializableRef { - serializableMappingCache.set(value); - return value; -} - -function cloneImport( - value: TValue -): SerializableRef { - const { source, imported } = value.__bundleData; - const clone = WorkletsModule.createSerializableImport(source, imported); - - serializableMappingCache.set(value, clone); - serializableMappingCache.set(clone); - - return clone as SerializableRef; -} - -function cloneCustom( - data: TValue, - pack: (data: TValue) => TPacked, - typeId: number -): SerializableRef { - const packedData = pack(data); - const serialized = createSerializable(packedData); - - return WorkletsModule.createCustomSerializable( - serialized, - typeId - ) as SerializableRef; -} - -function inaccessibleObject( - value: TValue -): SerializableRef { - // This is reached for object types that are not of plain Object.prototype. - // We don't support such objects from being transferred as serializables to - // the UI runtime and hence we replace them with "inaccessible object" - // which is implemented as a Proxy object that throws on any attempt - // of accessing its fields. We argue that such objects can sometimes leak - // as attributes of objects being captured by worklets but should never - // be used on the UI runtime regardless. If they are being accessed, the user - // will get an appropriate error message. - const clone = createSerializable(INACCESSIBLE_OBJECT as TValue); - serializableMappingCache.set(value, clone); - return clone; -} - -const WORKLET_CODE_THRESHOLD = 255; - -function getWorkletCode(value: WorkletFunction) { - const code = value?.__initData?.code; - if (!code) { - return 'unknown'; - } - if (code.length > WORKLET_CODE_THRESHOLD) { - return `${code.substring(0, WORKLET_CODE_THRESHOLD)}...`; - } - return code; -} - -type RemoteFunction = { - __remoteFunction: FlatSerializableRef; -}; - -function isRemoteFunction(value: { - __remoteFunction?: unknown; -}): value is RemoteFunction { - 'worklet'; - return !!value.__remoteFunction; -} - -/** - * We freeze - * - * - Arrays, - * - Remote functions, - * - Plain JS objects, - * - * That are transformed to a serializable with a meaningful warning. This should - * help detect issues when someone modifies data after it's been converted. - * Meaning that they may be doing a faulty assumption in their code expecting - * that the updates are going to automatically propagate to the object sent to - * the UI thread. If the user really wants some objects to be mutable they - * should use shared values instead. - */ -function freezeObjectInDev(value: TValue) { - if (!__DEV__ || globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - return; - } - Object.entries(value).forEach(([key, element]) => { - const descriptor = Object.getOwnPropertyDescriptor(value, key)!; - if (!descriptor.configurable) { - return; - } - Object.defineProperty(value, key, { - get() { - return element; - }, - set() { - logger.warn( - `Tried to modify key \`${key}\` of an object which has been already passed to a worklet. See - https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#tried-to-modify-key-of-an-object-which-has-been-converted-to-a-serializable - for more details.` - ); - }, - }); - }); - Object.preventExtensions(value); -} - -function makeShareableCloneOnUIRecursiveLEGACY( - value: TValue -): FlatSerializableRef { - 'worklet'; - // eslint-disable-next-line @typescript-eslint/no-shadow - function cloneRecursive(value: TValue): FlatSerializableRef { - if ( - (typeof value === 'object' && value !== null) || - typeof value === 'function' - ) { - if (isHostObject(value)) { - // We call `_createSerializableClone` to wrap the provided HostObject - // inside SerializableJSRef. - return global._createSerializableHostObject( - value - ) as FlatSerializableRef; - } - if (isRemoteFunction(value)) { - // RemoteFunctions are created by us therefore they are - // a Serializable out of the box and there is no need to - // call `_createSerializableClone`. - return value.__remoteFunction; - } - if (Array.isArray(value)) { - return global._createSerializableArray( - value.map(cloneRecursive) - ) as FlatSerializableRef; - } - if ((value as Record).__synchronizableRef) { - return global._createSerializableSynchronizable( - value - ) as FlatSerializableRef; - } - if (Object.getPrototypeOf(value) !== Object.prototype) { - const length = globalThis.__customSerializationRegistry.length; - for (let i = 0; i < length; i++) { - const { determine, pack } = - globalThis.__customSerializationRegistry[i]; - if (determine(value)) { - const packedData = pack(value); - return globalThis.__workletsModuleProxy?.createCustomSerializable( - cloneRecursive(packedData as TValue) as SerializableRef, - i - ) as FlatSerializableRef; - } - } - } - const toAdapt: Record> = {}; - for (const [key, element] of Object.entries(value)) { - toAdapt[key] = cloneRecursive(element); - } - return global._createSerializable( - toAdapt, - value - ) as FlatSerializableRef; - } - - if (typeof value === 'string') { - return global._createSerializableString(value); - } - - if (typeof value === 'number') { - return global._createSerializableNumber(value); - } - - if (typeof value === 'boolean') { - return global._createSerializableBoolean(value); - } - - if (typeof value === 'bigint') { - return global._createSerializableBigInt(value); - } - - if (value === undefined) { - return global._createSerializableUndefined(); - } - - if (value === null) { - return global._createSerializableNull(); - } - - return global._createSerializable(value, undefined); - } - return cloneRecursive(value); -} - -/** @deprecated This function is no longer supported. */ -export const makeShareableCloneOnUIRecursive = ( - globalThis._WORKLETS_BUNDLE_MODE - ? createSerializable - : makeShareableCloneOnUIRecursiveLEGACY -) as typeof makeShareableCloneOnUIRecursiveLEGACY; - -/** - * This function creates a value on UI with persistent state - changes to it on - * the UI thread will be seen by all worklets. Use it when you want to create a - * value that is read and written only on the UI thread. - * - * @deprecated This function is no longer supported. - */ -export function makeShareable(value: TValue): TValue { - if (serializableMappingCache.get(value)) { - return value; - } - const handle = createSerializable({ - __init: () => { - 'worklet'; - return value; - }, - }); - serializableMappingCache.set(value, handle); - return value; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/serializable.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/serializable.ts deleted file mode 100644 index a7c222cb..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/serializable.ts +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -import type { - FlatSerializableRef, - RegistrationData, - SerializableRef, -} from './types'; - -export function isSerializableRef( - value: unknown -): value is SerializableRef { - return true; -} - -export function createSerializable( - value: TValue -): SerializableRef { - return value as SerializableRef; -} - -export function makeShareableCloneOnUIRecursive( - value: TValue -): FlatSerializableRef { - return value as FlatSerializableRef; -} - -export function makeShareable(value: TValue): TValue { - return value; -} - -export function registerCustomSerializable< - TValue extends object, - TPacked extends object, ->(_registrationData: RegistrationData) { - // noop -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.native.ts deleted file mode 100644 index f2701943..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.native.ts +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -import type { SerializableRef } from './types'; - -/** - * This symbol is used to represent a mapping from the value to itself. - * - * It's used to prevent converting a serializable that's already converted - for - * example a Shared Value that's in worklet's closure. - */ -export const serializableMappingFlag = Symbol('serializable flag'); - -/* -During a fast refresh, React holds the same instance of a Mutable -(that's guaranteed by `useRef`) but `serializableCache` gets regenerated and thus -becoming empty. This happens when editing the file that contains the definition of this cache. - -Because of it, `createSerializable` can't find given mapping -in `serializableCache` for the Mutable and tries to clone it as if it was a regular JS object. -During cloning we use `Object.entries` to iterate over the keys which throws an error on accessing `_value`. -For convenience we moved this cache to a separate file so it doesn't scare us with red squiggles. -*/ - -const cache = new WeakMap(); - -export const serializableMappingCache = { - set(serializable: object, serializableRef?: SerializableRef): void { - cache.set(serializable, serializableRef || serializableMappingFlag); - }, - get: cache.get.bind(cache), -}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.ts deleted file mode 100644 index 94a07059..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/serializableMappingCache.ts +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -import type { SerializableRef } from './types'; - -export const serializableMappingCache = { - set(_serializable: object, _serializableRef?: SerializableRef): void { - // NOOP - }, - get(_key: object): object | symbol | SerializableRef { - return null!; - }, -}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.native.ts deleted file mode 100644 index f763d5d4..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.native.ts +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -import { WorkletsModule } from '../WorkletsModule/NativeWorklets'; -import { createSerializable } from './serializable'; -import type { Synchronizable } from './types'; - -export function createSynchronizable( - initialValue: TValue -): Synchronizable { - const synchronizableRef = WorkletsModule.createSynchronizable( - createSerializable(initialValue) - ); - - return globalThis.__synchronizableUnpacker( - synchronizableRef - ) as unknown as Synchronizable; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.ts deleted file mode 100644 index 7a25de06..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizable.ts +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -import { WorkletsError } from '../debug/WorkletsError'; -import type { Synchronizable } from './types'; - -export function createSynchronizable( - _value: TValue -): Synchronizable { - throw new WorkletsError('`createSynchronizable` is not supported on web.'); -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizableUnpacker.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizableUnpacker.native.ts deleted file mode 100644 index 523be941..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/synchronizableUnpacker.native.ts +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -import { createSerializable } from './serializable'; -import { type Synchronizable, type SynchronizableRef } from './types'; - -export function __installUnpacker() { - // TODO: Add cache for synchronizables. - const serializer = - !globalThis._WORKLET || globalThis._WORKLETS_BUNDLE_MODE - ? (value: unknown, _: unknown) => createSerializable(value) - : globalThis._createSerializable; - - function synchronizableUnpacker( - synchronizableRef: SynchronizableRef - ): Synchronizable { - const synchronizable = - synchronizableRef as unknown as Synchronizable; - const proxy = globalThis.__workletsModuleProxy!; - - synchronizable.__synchronizableRef = true; - synchronizable.getDirty = () => { - return proxy.synchronizableGetDirty(synchronizable); - }; - synchronizable.getBlocking = () => { - return proxy.synchronizableGetBlocking(synchronizable); - }; - synchronizable.setBlocking = ( - valueOrFunction: TValue | ((prev: TValue) => TValue) - ) => { - let newValue: TValue; - if (typeof valueOrFunction === 'function') { - const func = valueOrFunction as (prev: TValue) => TValue; - synchronizable.lock(); - const prev = synchronizable.getBlocking(); - newValue = func(prev); - - proxy.synchronizableSetBlocking( - synchronizable, - serializer(newValue, undefined) - ); - - synchronizable.unlock(); - } else { - const value = valueOrFunction; - newValue = value; - proxy.synchronizableSetBlocking( - synchronizable, - serializer(newValue, undefined) - ); - } - }; - synchronizable.lock = () => { - proxy.synchronizableLock(synchronizable); - }; - synchronizable.unlock = () => { - proxy.synchronizableUnlock(synchronizable); - }; - - return synchronizable; - } - - globalThis.__synchronizableUnpacker = synchronizableUnpacker; -} - -export type SynchronizableUnpacker = ( - synchronizableRef: SynchronizableRef -) => Synchronizable; diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/types.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/types.ts deleted file mode 100644 index 488125e3..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/types.ts +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -/** - * The below type is used for HostObjects returned by the JSI API that don't - * have any accessible fields or methods but can carry data that is accessed - * from the c++ side. We add a field to the type to make it possible for - * typescript to recognize which JSI methods accept those types as arguments and - * to be able to correctly type check other methods that may use them. However, - * this field is not actually defined nor should be used for anything else as - * assigning any data to those objects will throw an error. - */ -export type SerializableRef = { - __serializableRef: true; - __nativeStateSerializableJSRef: TValue; -}; - -// In case of objects with depth or arrays of objects or arrays of arrays etc. -// we add this utility type that makes it a `SharaebleRef` of the outermost type. -export type FlatSerializableRef = - TValue extends SerializableRef - ? SerializableRef - : SerializableRef; - -export type SynchronizableRef = { - __synchronizableRef: true; - __nativeStateSynchronizableJSRef: TValue; -}; - -export type Synchronizable = SerializableRef & - SynchronizableRef & { - __synchronizableRef: true; - getDirty(): TValue; - getBlocking(): TValue; - setBlocking(value: TValue | ((prev: TValue) => TValue)): void; - lock(): void; - unlock(): void; - }; - -/** - * Registration data for - * [registerCustomSerializable](https://docs.swmansion.com/react-native-reanimated/docs/memory/registerCustomSerializable) - * function. - */ -export type RegistrationData = { - /** - * A unique name for the Custom Serializable. It's used to prevent duplicate - * registrations of the same Custom Serializable. You will get warned if you - * attempt to register a Custom Serializable with a name that has already been - * used. - */ - name: string; - /** - * A worklet that checks whether a given JavaScript value is of the type - * handled by this Custom Serializable. - */ - determine: (value: object) => value is TValue; - /** - * A worklet that packs the JavaScript value of type `TValue` into a value - * that can be serialized by default as Serializable. The function must return - * a [supported type for - * Serialization](https://docs.swmansion.com/react-native-reanimated/docs/memory/Serializable#supported-types). - */ - pack: (value: TValue) => TPacked; - /** - * A worklet that unpacks the packed value, after it's been deserialized from - * it's packed form, back into the JavaScript value of type `TValue`. - */ - unpack: (value: TPacked) => TValue; -}; - -export type SerializationData = Omit< - RegistrationData, - 'name' -> & { - /** Only defined on the RN Runtime. */ - name?: string; -}; - -export type CustomSerializationRegistry = SerializationData[]; diff --git a/frontend-admin/node_modules/react-native-worklets/src/memory/valueUnpacker.native.ts b/frontend-admin/node_modules/react-native-worklets/src/memory/valueUnpacker.native.ts deleted file mode 100644 index 5850da48..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/memory/valueUnpacker.native.ts +++ /dev/null @@ -1,92 +0,0 @@ -'use strict'; - -import type { ValueUnpacker, WorkletFunction } from '../types'; - -declare global { - var evalWithSourceMap: - | ((js: string, sourceURL: string, sourceMap: string) => () => unknown) - | undefined; - var evalWithSourceUrl: - | ((js: string, sourceURL: string) => () => unknown) - | undefined; -} - -function __installUnpacker() { - const workletsCache = new Map unknown>(); - const handleCache = new WeakMap(); - - function valueUnpacker( - objectToUnpack: ObjectToUnpack, - category?: string, - remoteFunctionName?: string - ): unknown { - // eslint-disable-next-line strict - 'use strict'; - const workletHash = objectToUnpack.__workletHash; - if (workletHash !== undefined) { - let workletFun = workletsCache.get(workletHash); - if (workletFun === undefined) { - const initData = objectToUnpack.__initData; - if (globalThis.evalWithSourceMap) { - // if the runtime (hermes only for now) supports loading source maps - // we want to use the proper filename for the location as it guarantees - // that debugger understands and loads the source code of the file where - // the worklet is defined. - workletFun = globalThis.evalWithSourceMap( - '(' + initData!.code + '\n)', - initData!.location!, - initData!.sourceMap! - ); - } else if (globalThis.evalWithSourceUrl) { - // if the runtime doesn't support loading source maps, in dev mode we - // can pass source url when evaluating the worklet. Now, instead of using - // the actual file location we use worklet hash, as it the allows us to - // properly symbolicate traces (see errors.ts for details) - workletFun = globalThis.evalWithSourceUrl( - '(' + initData!.code + '\n)', - `worklet_${workletHash}` - ); - } else { - // in release we use the regular eval to save on JSI calls - // eslint-disable-next-line no-eval - workletFun = eval('(' + initData!.code + '\n)'); - } - workletsCache.set(workletHash, workletFun!); - } - const functionInstance = workletFun!.bind(objectToUnpack); - objectToUnpack._recur = functionInstance; - return functionInstance; - } else if (objectToUnpack.__init !== undefined) { - let value = handleCache.get(objectToUnpack); - if (value === undefined) { - value = objectToUnpack.__init(); - handleCache.set(objectToUnpack, value); - } - return value; - } else if (category === 'RemoteFunction') { - const fun = () => { - const label = remoteFunctionName - ? `function \`${remoteFunctionName}\`` - : 'anonymous function'; - // eslint-disable-next-line reanimated/use-worklets-error - throw new Error(`[Worklets] Tried to synchronously call a non-worklet ${label} on the UI thread. -See https://docs.swmansion.com/react-native-worklets/docs/guides/troubleshooting#tried-to-synchronously-call-a-non-worklet-function-on-the-ui-thread for more details.`); - }; - fun.__remoteFunction = objectToUnpack; - return fun; - } else { - // eslint-disable-next-line reanimated/use-worklets-error - throw new Error( - `[Worklets] Data type in category "${category}" not recognized by value unpacker: "${globalThis._toString( - objectToUnpack - )}".` - ); - } - } - - globalThis.__valueUnpacker = valueUnpacker as ValueUnpacker; -} - -interface ObjectToUnpack extends WorkletFunction { - _recur: unknown; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/mock.ts b/frontend-admin/node_modules/react-native-worklets/src/mock.ts deleted file mode 100644 index 4923ced9..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/mock.ts +++ /dev/null @@ -1,107 +0,0 @@ -'use strict'; - -import { mockedRequestAnimationFrame } from './runLoop/uiRuntime/mockedRequestAnimationFrame'; -import { RuntimeKind } from './runtimeKind'; -import { isWorkletFunction } from './workletFunction'; - -const NOOP = () => {}; -const NOOP_FACTORY = () => NOOP; -const ID = (value: TValue) => value; -const IMMEDIATE_CALLBACK_INVOCATION = (callback: () => TCallback) => - callback(); - -globalThis._WORKLET = false; -globalThis.__RUNTIME_KIND = RuntimeKind.ReactNative; -globalThis._log = console.log; -globalThis._getAnimationTimestamp = () => performance.now(); -// requestAnimationFrame react-native jest's setup is incorrect as it polyfills -// the method directly using setTimeout, therefore the callback doesn't get the -// expected timestamp as the only argument: https://github.com/facebook/react-native/blob/main/packages/react-native/jest/setup.js#L28 -// We override this setup here to make sure that callbacks get the proper timestamps -// when executed. For non-jest environments we define requestAnimationFrame in setupRequestAnimationFrame -// @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number -globalThis.requestAnimationFrame = mockedRequestAnimationFrame; - -const WorkletAPI = { - isShareableRef: () => true, - makeShareable: ID, - makeShareableCloneOnUIRecursive: ID, - makeShareableCloneRecursive: ID, - shareableMappingCache: new Map(), - getStaticFeatureFlag: () => false, - setDynamicFeatureFlag: NOOP, - isSynchronizable: () => false, - getRuntimeKind: () => RuntimeKind.ReactNative, - RuntimeKind: RuntimeKind, - createWorkletRuntime: NOOP_FACTORY, - runOnRuntime: ID, - scheduleOnRuntime: IMMEDIATE_CALLBACK_INVOCATION, - createSerializable: ID, - isSerializableRef: ID, - serializableMappingCache: new Map(), - createSynchronizable: ID, - callMicrotasks: NOOP, - executeOnUIRuntimeSync: ID, - runOnJS( - fun: (...args: Args) => ReturnValue - ): (...args: Args) => void { - return (...args) => - queueMicrotask( - args.length - ? () => (fun as (...args: Args) => ReturnValue)(...args) - : (fun as () => ReturnValue) - ); - }, - runOnUI( - worklet: (...args: Args) => ReturnValue - ): (...args: Args) => void { - return (...args) => { - // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask - // callbacks run on the same queue and can be interleaved. There is no way - // to flush particular queue in Jest and the only control over mocked timers - // is by using jest.advanceTimersByTime() method which advances all types - // of timers including immediate and animation callbacks. Ideally we'd like - // to have some way here to schedule work along with React updates, but - // that's not possible, and hence in Jest environment instead of using scheduling - // mechanism we just schedule the work ommiting the queue. This is ok for the - // uses that we currently have but may not be ok for future tests that we write. - mockedRequestAnimationFrame(() => { - worklet(...args); - }); - }; - }, - runOnUIAsync( - worklet: (...args: Args) => ReturnValue - ): (...args: Args) => Promise { - return (...args: Args) => { - return new Promise((resolve) => { - mockedRequestAnimationFrame(() => { - const result = worklet(...args); - resolve(result); - }); - }); - }; - }, - runOnUISync: IMMEDIATE_CALLBACK_INVOCATION, - scheduleOnRN( - fun: (...args: Args) => ReturnValue, - ...args: Args - ): void { - WorkletAPI.runOnJS(fun)(...args); - }, - scheduleOnUI( - worklet: (...args: Args) => ReturnValue, - ...args: Args - ): void { - WorkletAPI.runOnUI(worklet)(...args); - }, - // eslint-disable-next-line camelcase - unstable_eventLoopTask: NOOP_FACTORY, - isWorkletFunction: isWorkletFunction, - WorkletsModule: {}, -}; - -module.exports = { - __esModule: true, - ...WorkletAPI, -}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/platformChecker.native.ts b/frontend-admin/node_modules/react-native-worklets/src/platformChecker.native.ts deleted file mode 100644 index 52aa24ab..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/platformChecker.native.ts +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -export const IS_JEST = false; diff --git a/frontend-admin/node_modules/react-native-worklets/src/platformChecker.ts b/frontend-admin/node_modules/react-native-worklets/src/platformChecker.ts deleted file mode 100644 index 96f78257..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/platformChecker.ts +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -import { Platform } from 'react-native'; - -export const IS_JEST: boolean = !!process.env.JEST_WORKER_ID; -export const IS_WEB: boolean = Platform.OS === 'web'; -export const IS_WINDOWS: boolean = Platform.OS === 'windows'; -export const SHOULD_BE_USE_WEB: boolean = IS_JEST || IS_WEB || IS_WINDOWS; diff --git a/frontend-admin/node_modules/react-native-worklets/src/privateGlobals.d.ts b/frontend-admin/node_modules/react-native-worklets/src/privateGlobals.d.ts index 7082c0f3..1b783344 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/privateGlobals.d.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/privateGlobals.d.ts @@ -1,15 +1,15 @@ +/* eslint-disable reanimated/use-global-this */ 'use strict'; // This file works by accident - currently Builder Bob doesn't move `.d.ts` files to output types. // If it ever breaks, we should address it so we'd not pollute the user's global namespace. import type { callGuardDEV } from './callGuard'; -import type { reportFatalRemoteError } from './debug/errors'; -import type { CustomSerializableUnpacker } from './memory/customSerializableUnpacker'; -import type { SynchronizableUnpacker } from './memory/synchronizableUnpacker'; -import type { CustomSerializationRegistry } from './memory/types'; +import type { reportFatalRemoteError } from './errors'; import type { Queue } from './runLoop/workletRuntime/taskQueue'; -import type { ValueUnpacker } from './types'; -import type { WorkletsModuleProxy } from './WorkletsModule/workletsModuleProxy'; +import type { SynchronizableUnpacker } from './synchronizableUnpacker'; +import type { IWorkletsErrorConstructor } from './WorkletsError'; +import type { WorkletsModuleProxy } from './WorkletsModule'; +import type { ValueUnpacker } from './workletTypes'; declare global { /** The only runtime-available require method is `__r` defined by Metro. */ @@ -61,8 +61,6 @@ declare global { var __reportFatalRemoteError: typeof reportFatalRemoteError | undefined; var __valueUnpacker: ValueUnpacker; var __synchronizableUnpacker: SynchronizableUnpacker; - var __customSerializationRegistry: CustomSerializationRegistry; - var __customSerializableUnpacker: CustomSerializableUnpacker; var __callGuardDEV: typeof callGuardDEV | undefined; var __flushAnimationFrame: (timestamp: number) => void; var __frameTimestamp: number | undefined; @@ -73,16 +71,9 @@ declare global { worklet: SerializableRef<() => void> ) => void; var _microtaskQueueFinalizers: (() => void)[]; + var WorkletsError: IWorkletsErrorConstructor; var _scheduleTimeoutCallback: (delay: number, handlerId: number) => void; var __runTimeoutCallback: (handlerId: number) => void; var __flushMicrotasks: () => void; var _taskQueue: Queue; - /** Only in Debug builds. */ - var __hasNativeState: (value: object) => boolean; - /** Only in Debug builds. */ - var __isHostObject: (value: object) => boolean; - interface NodeRequire { - resolveWeak(id: string): number; - getModules(): Map; - } } diff --git a/frontend-admin/node_modules/react-native-worklets/src/runtimes.native.ts b/frontend-admin/node_modules/react-native-worklets/src/runtimes.native.ts deleted file mode 100644 index bca57ac5..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/runtimes.native.ts +++ /dev/null @@ -1,198 +0,0 @@ -'use strict'; - -import { setupCallGuard } from './callGuard'; -import { registerWorkletsError, WorkletsError } from './debug/WorkletsError'; -import { - getMemorySafeCapturableConsole, - setupConsole, -} from './initializers/initializers'; -import { - createSerializable, - makeShareableCloneOnUIRecursive, -} from './memory/serializable'; -import { setupRunLoop } from './runLoop/workletRuntime'; -import { RuntimeKind } from './runtimeKind'; -import type { - WorkletFunction, - WorkletRuntime, - WorkletRuntimeConfig, -} from './types'; -import { isWorkletFunction } from './workletFunction'; -import { WorkletsModule } from './WorkletsModule/NativeWorklets'; - -/** - * Lets you create a new JS runtime which can be used to run worklets possibly - * on different threads than JS or UI thread. - * - * @param config - Runtime configuration object - {@link WorkletRuntimeConfig}. - * @returns WorkletRuntime which is a - * `jsi::HostObject` - {@link WorkletRuntime} - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ - */ -// @ts-expect-error Public API overload. -export function createWorkletRuntime( - config?: WorkletRuntimeConfig -): WorkletRuntime; - -/** - * @deprecated Please use the new config object signature instead: - * `createWorkletRuntime({ name, initializer })` - * - * Lets you create a new JS runtime which can be used to run worklets possibly - * on different threads than JS or UI thread. - * @param name - A name used to identify the runtime which will appear in - * devices list in Chrome DevTools. - * @param initializer - An optional worklet that will be run synchronously on - * the same thread immediately after the runtime is created. - * @returns WorkletRuntime which is a - * `jsi::HostObject` - {@link WorkletRuntime} - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ - */ -export function createWorkletRuntime( - name?: string, - initializer?: () => void -): WorkletRuntime; - -export function createWorkletRuntime( - nameOrConfig?: string | WorkletRuntimeConfigInternal, - initializer?: WorkletFunction<[], void> -): WorkletRuntime { - const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole(); - - let name: string; - let initializerFn: (() => void) | undefined; - let useDefaultQueue = true; - let customQueue: object | undefined; - let animationQueuePollingRate: number; - let enableEventLoop = true; - if (typeof nameOrConfig === 'string') { - name = nameOrConfig; - initializerFn = initializer; - } else { - // TODO: Make anonymous name globally unique. - name = nameOrConfig?.name ?? 'anonymous'; - initializerFn = nameOrConfig?.initializer; - useDefaultQueue = nameOrConfig?.useDefaultQueue ?? true; - customQueue = nameOrConfig?.customQueue; - animationQueuePollingRate = Math.round( - nameOrConfig?.animationQueuePollingRate ?? 16 - ); - enableEventLoop = nameOrConfig?.enableEventLoop ?? true; - } - - if (initializerFn && !isWorkletFunction(initializerFn)) { - throw new WorkletsError( - 'The initializer passed to `createWorkletRuntime` is not a worklet.' - ); - } - - return WorkletsModule.createWorkletRuntime( - name, - createSerializable(() => { - 'worklet'; - setupCallGuard(); - registerWorkletsError(); - setupConsole(runtimeBoundCapturableConsole); - if (enableEventLoop) { - setupRunLoop(animationQueuePollingRate); - } - initializerFn?.(); - }), - useDefaultQueue, - customQueue, - enableEventLoop - ); -} - -/** - * Lets you asynchronously run a - * [worklet](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worklet) - * on a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime). - * - * Check - * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} - * for more information about the different runtime kinds. - * - * - The worklet is scheduled on the Worker Runtime's [Async - * Queue](https://github.com/software-mansion/react-native-reanimated/blob/main/packages/react-native-worklets/Common/cpp/worklets/RunLoop/AsyncQueue.h) - * - The function cannot be scheduled on the Worker Runtime from [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * or another [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime), - * unless the [Bundle - * Mode](https://docs.swmansion.com/react-native-worklets/docs/experimental/bundleMode) - * is enabled. - * - * @param workletRuntime - The runtime to schedule the worklet on. - * @param worklet - The worklet to schedule. - * @param args - The arguments to pass to the worklet. - * @returns The return value of the worklet. - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. -export function scheduleOnRuntime( - workletRuntime: WorkletRuntime, - worklet: (...args: Args) => ReturnValue, - ...args: Args -): void; - -export function scheduleOnRuntime( - workletRuntime: WorkletRuntime, - worklet: WorkletFunction, - ...args: Args -): void { - 'worklet'; - if (__DEV__ && !isWorkletFunction(worklet)) { - throw new WorkletsError( - 'The function passed to `scheduleOnRuntime` is not a worklet.' - ); - } - if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { - globalThis._scheduleOnRuntime( - workletRuntime, - makeShareableCloneOnUIRecursive(() => { - 'worklet'; - worklet(...args); - }) - ); - } - - WorkletsModule.scheduleOnRuntime( - workletRuntime, - createSerializable(() => { - 'worklet'; - worklet(...args); - globalThis.__flushMicrotasks(); - }) - ); -} - -/** - * @deprecated Use `scheduleOnRuntime` instead. - * - * Schedule a worklet to execute on the background queue. - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. -export function runOnRuntime( - workletRuntime: WorkletRuntime, - worklet: (...args: Args) => ReturnValue -): WorkletFunction; - -export function runOnRuntime( - workletRuntime: WorkletRuntime, - worklet: WorkletFunction -): (...args: Args) => void { - 'worklet'; - if (__DEV__ && !isWorkletFunction(worklet)) { - throw new WorkletsError( - 'The function passed to `runOnRuntime` is not a worklet.' - ); - } - return (...args) => scheduleOnRuntime(workletRuntime, worklet, ...args); -} - -type WorkletRuntimeConfigInternal = WorkletRuntimeConfig & { - initializer?: WorkletFunction<[], void>; -}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/runtimes.ts b/frontend-admin/node_modules/react-native-worklets/src/runtimes.ts index 428b5e07..2e5a85dc 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/runtimes.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/runtimes.ts @@ -1,40 +1,193 @@ 'use strict'; -import { WorkletsError } from './debug/WorkletsError'; -import type { - WorkletFunction, - WorkletRuntime, - WorkletRuntimeConfig, -} from './types'; +import { setupCallGuard } from './callGuard'; +import { getMemorySafeCapturableConsole, setupConsole } from './initializers'; +import { SHOULD_BE_USE_WEB } from './PlatformChecker'; +import { setupRunLoop } from './runLoop/workletRuntime'; +import { RuntimeKind } from './runtimeKind'; +import { + createSerializable, + makeShareableCloneOnUIRecursive, +} from './serializable'; +import { isWorkletFunction } from './workletFunction'; +import { registerWorkletsError, WorkletsError } from './WorkletsError'; +import { WorkletsModule } from './WorkletsModule'; +import type { WorkletFunction, WorkletRuntime } from './workletTypes'; +/** + * Lets you create a new JS runtime which can be used to run worklets possibly + * on different threads than JS or UI thread. + * + * @param config - Runtime configuration object - {@link WorkletRuntimeConfig}. + * @returns WorkletRuntime which is a + * `jsi::HostObject` - {@link WorkletRuntime} + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ + */ +// @ts-expect-error Public API overload. export function createWorkletRuntime( config?: WorkletRuntimeConfig ): WorkletRuntime; +/** + * @deprecated Please use the new config object signature instead: + * `createWorkletRuntime({ name, initializer })` + * + * Lets you create a new JS runtime which can be used to run worklets possibly + * on different threads than JS or UI thread. + * @param name - A name used to identify the runtime which will appear in + * devices list in Chrome DevTools. + * @param initializer - An optional worklet that will be run synchronously on + * the same thread immediately after the runtime is created. + * @returns WorkletRuntime which is a + * `jsi::HostObject` - {@link WorkletRuntime} + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/createWorkletRuntime/ + */ export function createWorkletRuntime( name?: string, initializer?: () => void ): WorkletRuntime; -export function createWorkletRuntime(): never { - throw new WorkletsError('`createWorkletRuntime` is not supported on web.'); +export function createWorkletRuntime( + nameOrConfig?: string | WorkletRuntimeConfigInternal, + initializer?: WorkletFunction<[], void> +): WorkletRuntime { + const runtimeBoundCapturableConsole = getMemorySafeCapturableConsole(); + + let name: string; + let initializerFn: (() => void) | undefined; + let useDefaultQueue = true; + let customQueue: object | undefined; + let animationQueuePollingRate: number; + let enableEventLoop = true; + if (typeof nameOrConfig === 'string') { + name = nameOrConfig; + initializerFn = initializer; + } else { + // TODO: Make anonymous name globally unique. + name = nameOrConfig?.name ?? 'anonymous'; + initializerFn = nameOrConfig?.initializer; + useDefaultQueue = nameOrConfig?.useDefaultQueue ?? true; + customQueue = nameOrConfig?.customQueue; + animationQueuePollingRate = Math.round( + nameOrConfig?.animationQueuePollingRate ?? 16 + ); + enableEventLoop = nameOrConfig?.enableEventLoop ?? true; + } + + if (initializerFn && !isWorkletFunction(initializerFn)) { + throw new WorkletsError( + 'The initializer passed to `createWorkletRuntime` is not a worklet.' + ); + } + + return WorkletsModule.createWorkletRuntime( + name, + createSerializable(() => { + 'worklet'; + setupCallGuard(); + registerWorkletsError(); + setupConsole(runtimeBoundCapturableConsole); + if (enableEventLoop) { + setupRunLoop(animationQueuePollingRate); + } + initializerFn?.(); + }), + useDefaultQueue, + customQueue, + enableEventLoop + ); } +// @ts-expect-error Check `runOnUI` overload. export function runOnRuntime( workletRuntime: WorkletRuntime, worklet: (...args: Args) => ReturnValue ): WorkletFunction; - -export function runOnRuntime(): never { - throw new WorkletsError('`runOnRuntime` is not supported on web.'); -} - -export function scheduleOnRuntime( +/** Schedule a worklet to execute on the background queue. */ +export function runOnRuntime( workletRuntime: WorkletRuntime, - worklet: (...args: Args) => ReturnValue, - ...args: Args -): void; - -export function scheduleOnRuntime(): never { - throw new WorkletsError('`scheduleOnRuntime` is not supported on web.'); + worklet: WorkletFunction +): (...args: Args) => void { + 'worklet'; + if (__DEV__ && !SHOULD_BE_USE_WEB && !isWorkletFunction(worklet)) { + throw new WorkletsError( + 'The function passed to `runOnRuntime` is not a worklet.' + ); + } + if (globalThis.__RUNTIME_KIND !== RuntimeKind.ReactNative) { + return (...args) => + globalThis._scheduleOnRuntime( + workletRuntime, + makeShareableCloneOnUIRecursive(() => { + 'worklet'; + worklet(...args); + }) + ); + } + return (...args) => + WorkletsModule.scheduleOnRuntime( + workletRuntime, + createSerializable(() => { + 'worklet'; + worklet(...args); + globalThis.__flushMicrotasks(); + }) + ); } + +/** Configuration object for creating a worklet runtime. */ +export type WorkletRuntimeConfig = { + /** The name of the worklet runtime. */ + name?: string; + /** + * A worklet that will be run immediately after the runtime is created and + * before any other worklets. + */ + initializer?: () => void; + /** + * Time interval in milliseconds between polling of frame callbacks scheduled + * by requestAnimationFrame. If not specified, it defaults to 16 ms. + */ + animationQueuePollingRate?: number; + /** + * Determines whether to enable the default Event Loop or not. The Event Loop + * provides implementations for `setTimeout`, `setImmediate`, `setInterval`, + * `requestAnimationFrame`, `queueMicrotask`, `clearTimeout`, `clearInterval`, + * `clearImmediate`, and `cancelAnimationFrame` methods. If not specified, it + * defaults to `true`. + */ + enableEventLoop?: true; +} & ( + | { + /** + * If true, the runtime will use the default queue implementation for + * scheduling worklets. Defaults to true. + */ + useDefaultQueue?: true; + /** + * An optional custom queue to be used for scheduling worklets. + * + * The queue has to implement the C++ `AsyncQueue` interface from + * ``. + */ + customQueue?: never; + } + | { + /** + * If true, the runtime will use the default queue implementation for + * scheduling worklets. Defaults to true. + */ + useDefaultQueue: false; + /** + * An optional custom queue to be used for scheduling worklets. + * + * The queue has to implement the C++ `AsyncQueue` interface from + * ``. + */ + customQueue?: object; + } +); + +type WorkletRuntimeConfigInternal = WorkletRuntimeConfig & { + initializer?: WorkletFunction<[], void>; +}; diff --git a/frontend-admin/node_modules/react-native-worklets/src/specs/NativeWorkletsModule.ts b/frontend-admin/node_modules/react-native-worklets/src/specs/NativeWorkletsModule.ts index 4a5d6ad7..1ef93b02 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/specs/NativeWorkletsModule.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/specs/NativeWorkletsModule.ts @@ -1,6 +1,6 @@ 'use strict'; - -import { type TurboModule, TurboModuleRegistry } from 'react-native'; +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; export interface Spec extends TurboModule { installTurboModule: () => boolean; diff --git a/frontend-admin/node_modules/react-native-worklets/src/specs/index.ts b/frontend-admin/node_modules/react-native-worklets/src/specs/index.ts index 61d4b31a..f9a36f0b 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/specs/index.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/specs/index.ts @@ -4,7 +4,7 @@ import { RuntimeKind } from '../runtimeKind'; import type { Spec } from './NativeWorkletsModule'; import RNWorkletsTurboModule from './NativeWorkletsModule'; -export const WorkletsTurboModule: Spec | null | undefined = +export const WorkletsTurboModule: Spec | null = globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative ? RNWorkletsTurboModule : // In Bundle Mode, on Worklet Runtimes `RNWorkletsTurboModule` isn't diff --git a/frontend-admin/node_modules/react-native-worklets/src/threads.native.ts b/frontend-admin/node_modules/react-native-worklets/src/threads.native.ts deleted file mode 100644 index 5e59a65f..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/threads.native.ts +++ /dev/null @@ -1,423 +0,0 @@ -'use strict'; - -import { WorkletsError } from './debug/WorkletsError'; -import { - createSerializable, - makeShareableCloneOnUIRecursive, -} from './memory/serializable'; -import { serializableMappingCache } from './memory/serializableMappingCache'; -import { RuntimeKind } from './runtimeKind'; -import type { WorkletFunction, WorkletImport } from './types'; -import { isWorkletFunction } from './workletFunction'; -import { WorkletsModule } from './WorkletsModule/NativeWorklets'; - -type UIJob = [ - worklet: WorkletFunction, - args: Args, - resolve?: (value: ReturnValue) => void, -]; - -let runOnUIQueue: UIJob[] = []; - -export function setupMicrotasks() { - 'worklet'; - - let microtasksQueue: Array<() => void> = []; - let isExecutingMicrotasksQueue = false; - globalThis.queueMicrotask = (callback: () => void) => { - microtasksQueue.push(callback); - }; - globalThis._microtaskQueueFinalizers = []; - - globalThis.__callMicrotasks = () => { - if (isExecutingMicrotasksQueue) { - return; - } - try { - isExecutingMicrotasksQueue = true; - for (let index = 0; index < microtasksQueue.length; index += 1) { - // we use classic 'for' loop because the size of the currentTasks array may change while executing some of the callbacks due to queueMicrotask calls - microtasksQueue[index](); - } - microtasksQueue = []; - globalThis._microtaskQueueFinalizers.forEach((finalizer) => finalizer()); - } finally { - isExecutingMicrotasksQueue = false; - } - }; -} - -function callMicrotasksOnUIThread() { - 'worklet'; - globalThis.__callMicrotasks(); -} - -export const callMicrotasks = callMicrotasksOnUIThread; - -/** - * Lets you schedule a function to be executed on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - * - The callback executes asynchronously and doesn't return a value. - * - Passed function and args are automatically - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * and serialized. - * - This function cannot be called from the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * or a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime), - * unless you have the [Bundle Mode](/docs/experimental/bundleMode) enabled. - * - * @param fun - A reference to a function you want to schedule on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * @param args - Arguments to pass to the function. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnUI - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. -export function scheduleOnUI( - worklet: (...args: Args) => ReturnValue, - ...args: Args -): void; - -export function scheduleOnUI( - worklet: WorkletFunction, - ...args: Args -): void { - if ( - __DEV__ && - !isWorkletFunction(worklet) && - !(worklet as unknown as WorkletImport).__bundleData - ) { - throw new WorkletsError('`scheduleOnUI` can only be used with worklets.'); - } - if (__DEV__) { - // in DEV mode we call serializable conversion here because in case the object - // can't be converted, we will get a meaningful stack-trace as opposed to the - // situation when conversion is only done via microtask queue. This does not - // make the app particularily less efficient as converted objects are cached - // and for a given worklet the conversion only happens once. - createSerializable(worklet); - createSerializable(args); - } - - enqueueUI(worklet, args); -} - -/** - * Lets you asynchronously run - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). - * - * This method does not schedule the work immediately but instead waits for - * other worklets to be scheduled within the same JS loop. It uses - * queueMicrotask to schedule all the worklets at once making sure they will run - * within the same frame boundaries on the UI thread. - * - * @param fun - A reference to a function you want to execute on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/) - * from the [JavaScript - * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). - * @returns A function that accepts arguments for the function passed as the - * first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI @deprecated Use `scheduleOnUI` instead. - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. -export function runOnUI( - worklet: (...args: Args) => ReturnValue -): (...args: Args) => void; - -export function runOnUI( - worklet: WorkletFunction -): (...args: Args) => void { - if ( - __DEV__ && - !isWorkletFunction(worklet) && - !(worklet as unknown as WorkletImport).__bundleData - ) { - throw new WorkletsError('`runOnUI` can only be used with worklets.'); - } - return (...args: Args) => { - scheduleOnUI(worklet, ...args); - }; -} - -if (__DEV__) { - function runOnUIWorklet(): void { - 'worklet'; - throw new WorkletsError( - '`runOnUI` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.' - ); - } - - const serializableRunOnUIWorklet = createSerializable(runOnUIWorklet); - serializableMappingCache.set(runOnUI, serializableRunOnUIWorklet); -} - -/** - * Lets you run a function synchronously on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime) - * from the [RN - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#rn-runtime). - * Passed function and args are automatically - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * and serialized. - * - * - This function cannot be called from the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - This function cannot be called from a [Worker - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#worker-runtime). - * - * @param fun - A reference to a function you want to execute on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * @param args - Arguments to pass to the function. - * @returns The return value of the function passed as the first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUISync - */ -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. -export function runOnUISync( - worklet: (...args: Args) => ReturnValue, - ...args: Args -): ReturnValue; - -export function runOnUISync( - worklet: WorkletFunction, - ...args: Args -): ReturnValue { - return WorkletsModule.executeOnUIRuntimeSync( - createSerializable(() => { - 'worklet'; - const result = worklet(...args); - return makeShareableCloneOnUIRecursive(result); - }) - ); -} - -// @ts-expect-error This overload is correct since it's what user sees in their code -// before it's transformed by Worklets Babel plugin. -export function executeOnUIRuntimeSync( - worklet: (...args: Args) => ReturnValue -): (...args: Args) => ReturnValue; - -export function executeOnUIRuntimeSync( - worklet: WorkletFunction -): (...args: Args) => ReturnValue { - return (...args) => { - return runOnUISync(worklet, ...args); - }; -} - -type ReleaseRemoteFunction = { - (...args: Args): ReturnValue; -}; - -type DevRemoteFunction = { - __remoteFunction: (...args: Args) => ReturnValue; -}; - -type RemoteFunction = - | ReleaseRemoteFunction - | DevRemoteFunction; - -function runWorkletOnJS( - worklet: WorkletFunction, - ...args: Args -): void { - // remote function that calls a worklet synchronously on the JS runtime - worklet(...args); -} - -/** - * Lets you schedule a function to be executed on the RN runtime from any - * runtime. Check - * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} - * for more information about the different runtime kinds. - * - * Scheduling function from the RN Runtime (we are already on RN Runtime) simply - * uses `queueMicrotask`. - * - * When functions need to be scheduled from the UI Runtime, first function and - * args are serialized and then the system passes the scheduling responsibility - * to the JSScheduler. The JSScheduler then uses the RN CallInvoker to schedule - * the function asynchronously on the JavaScript thread by calling - * `jsCallInvoker_->invokeAsync()`. - * - * When called from a Worker Runtime, it uses the same JSScheduler mechanism. - * - * @param fun - A function you want to schedule on the RN runtime. A function - * can be a worklet, a remote function or a regular function. - * @param args - Arguments to pass to the function. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnRN - */ -export function scheduleOnRN( - fun: - | ((...args: Args) => ReturnValue) - | RemoteFunction - | WorkletFunction, - ...args: Args -): void { - 'worklet'; - type FunDevRemote = Extract>; - if (globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) { - // if we are already on the JS thread, we just schedule the worklet on the JS queue - queueMicrotask( - args.length - ? () => (fun as (...args: Args) => ReturnValue)(...args) - : (fun as () => ReturnValue) - ); - return; - } - if (isWorkletFunction(fun)) { - // If `fun` is a worklet, we schedule a call of a remote function `runWorkletOnJS` - // and pass the worklet as a first argument followed by original arguments. - scheduleOnRN(runWorkletOnJS, fun, ...args); - return; - } - if ((fun as FunDevRemote).__remoteFunction) { - // In development mode the function provided as `fun` throws an error message - // such that when someone accidentally calls it directly on the UI runtime, they - // see that they should use `runOnJS` instead. To facilitate that we put the - // reference to the original remote function in the `__remoteFunction` property. - fun = (fun as FunDevRemote).__remoteFunction; - } - - const scheduleOnRNImpl = - typeof fun === 'function' - ? globalThis._scheduleHostFunctionOnJS - : globalThis._scheduleRemoteFunctionOnJS; - - scheduleOnRNImpl( - fun as (...args: Args) => ReturnValue, - args.length > 0 ? makeShareableCloneOnUIRecursive(args) : undefined - ); -} - -/** - * Lets you asynchronously run - * non-[workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions that couldn't otherwise run on the [UI - * thread](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-thread). - * This applies to most external libraries as they don't have their functions - * marked with "worklet"; directive. - * - * @param fun - A reference to a function you want to execute on the JavaScript - * thread from the UI thread. - * @returns A function that accepts arguments for the function passed as the - * first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnJS - */ -/** @deprecated Use `scheduleOnRN` instead. */ -export function runOnJS( - fun: - | ((...args: Args) => ReturnValue) - | RemoteFunction - | WorkletFunction -): (...args: Args) => void { - 'worklet'; - return (...args: Args) => { - scheduleOnRN(fun, ...args); - }; -} - -/** - * Lets you asynchronously run - * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) - * functions on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * - * This method does not schedule the work immediately but instead waits for - * other worklets to be scheduled within the same JS loop. It uses - * queueMicrotask to schedule all the worklets at once making sure they will run - * within the same frame boundaries on the UI thread. - * - * @param fun - A reference to a function you want to execute on the [UI - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds#ui-runtime). - * from the [JavaScript - * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#javascript-runtime). - * @returns A promise that resolves to the return value of the function passed - * as the first argument. - * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUIAsync - */ -export function runOnUIAsync( - worklet: (...args: Args) => ReturnValue, - ...args: Args -): Promise { - if (__DEV__ && !isWorkletFunction(worklet)) { - throw new WorkletsError('`runOnUIAsync` can only be used with worklets.'); - } - return new Promise((resolve) => { - if (__DEV__) { - // in DEV mode we call serializable conversion here because in case the object - // can't be converted, we will get a meaningful stack-trace as opposed to the - // situation when conversion is only done via microtask queue. This does not - // make the app particularily less efficient as converted objects are cached - // and for a given worklet the conversion only happens once. - createSerializable(worklet); - createSerializable(args); - } - - enqueueUI(worklet as WorkletFunction, args, resolve); - }); -} - -if (__DEV__) { - function runOnUIAsyncWorklet(): void { - 'worklet'; - throw new WorkletsError( - '`runOnUIAsync` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.' - ); - } - - const serializableRunOnUIAsyncWorklet = - createSerializable(runOnUIAsyncWorklet); - serializableMappingCache.set(runOnUIAsync, serializableRunOnUIAsyncWorklet); -} - -function enqueueUI( - worklet: WorkletFunction, - args: Args, - resolve?: (value: ReturnValue) => void -): void { - const job = [worklet, args, resolve] as UIJob; - runOnUIQueue.push(job as unknown as UIJob); - if (runOnUIQueue.length === 1) { - flushUIQueue(); - } -} - -function flushUIQueue(): void { - queueMicrotask(() => { - const queue = runOnUIQueue; - runOnUIQueue = []; - WorkletsModule.scheduleOnUI( - createSerializable(() => { - 'worklet'; - queue.forEach(([workletFunction, workletArgs, jobResolve]) => { - const result = workletFunction(...workletArgs); - if (jobResolve) { - runOnJS(jobResolve)(result); - } - }); - callMicrotasks(); - }) - ); - }); -} - -/** - * Added temporarily for integration with `react-native-audio-api`. Don't depend - * on this API as it may change without notice. - */ -// eslint-disable-next-line camelcase -export function unstable_eventLoopTask( - worklet: (...args: TArgs) => TRet -) { - return (...args: TArgs) => { - 'worklet'; - worklet(...args); - callMicrotasks(); - }; -} diff --git a/frontend-admin/node_modules/react-native-worklets/src/threads.ts b/frontend-admin/node_modules/react-native-worklets/src/threads.ts index 3d3a908c..854a5494 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/threads.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/threads.ts @@ -1,80 +1,412 @@ 'use strict'; - -import { WorkletsError } from './debug/WorkletsError'; -import { mockedRequestAnimationFrame } from './runLoop/uiRuntime/mockedRequestAnimationFrame'; - -export function callMicrotasks(): void { - // on web flushing is a noop as immediates are handled by the browser -} - -export function scheduleOnUI( - worklet: (...args: Args) => ReturnValue, - ...args: Args -): void { - enqueueUI(worklet, args); -} - -export function runOnUI( - worklet: (...args: Args) => ReturnValue -): (...args: Args) => void { - return (...args) => { - scheduleOnUI(worklet, ...args); - }; -} - -export function runOnUISync( - worklet: (...args: Args) => ReturnValue, - ...args: Args -): ReturnValue; - -export function runOnUISync(): never { - throw new WorkletsError('`runOnUISync` is not supported on web.'); -} - -export function executeOnUIRuntimeSync( - worklet: (...args: Args) => ReturnValue -): (...args: Args) => ReturnValue; - -export function executeOnUIRuntimeSync(): never { - throw new WorkletsError('`executeOnUIRuntimeSync` is not supported on web.'); -} - -export function runOnJS( - fun: (...args: Args) => ReturnValue -): (...args: Args) => void { - return (...args) => scheduleOnRN(fun, ...args); -} - -export function scheduleOnRN( - fun: (...args: Args) => ReturnValue, - ...args: Args -): void { - queueMicrotask( - args.length - ? () => (fun as (...args: Args) => ReturnValue)(...args) - : (fun as () => ReturnValue) - ); -} - -export function runOnUIAsync( - worklet: (...args: Args) => ReturnValue, - ...args: Args -): Promise { - return new Promise((resolve) => { - enqueueUI(worklet, args, resolve); - }); -} +import { IS_JEST, SHOULD_BE_USE_WEB } from './PlatformChecker'; +import { RuntimeKind } from './runtimeKind'; +import { + createSerializable, + makeShareableCloneOnUIRecursive, +} from './serializable'; +import { serializableMappingCache } from './serializableMappingCache'; +import { isWorkletFunction } from './workletFunction'; +import { WorkletsError } from './WorkletsError'; +import { WorkletsModule } from './WorkletsModule'; +import type { WorkletFunction, WorkletImport } from './workletTypes'; type UIJob = [ - worklet: (...args: Args) => ReturnValue, + worklet: WorkletFunction, args: Args, resolve?: (value: ReturnValue) => void, ]; let runOnUIQueue: UIJob[] = []; -function enqueueUI( +export function setupMicrotasks() { + 'worklet'; + + let microtasksQueue: Array<() => void> = []; + let isExecutingMicrotasksQueue = false; + global.queueMicrotask = (callback: () => void) => { + microtasksQueue.push(callback); + }; + global._microtaskQueueFinalizers = []; + + global.__callMicrotasks = () => { + if (isExecutingMicrotasksQueue) { + return; + } + try { + isExecutingMicrotasksQueue = true; + for (let index = 0; index < microtasksQueue.length; index += 1) { + // we use classic 'for' loop because the size of the currentTasks array may change while executing some of the callbacks due to queueMicrotask calls + microtasksQueue[index](); + } + microtasksQueue = []; + global._microtaskQueueFinalizers.forEach((finalizer) => finalizer()); + } finally { + isExecutingMicrotasksQueue = false; + } + }; +} + +function callMicrotasksOnUIThread() { + 'worklet'; + global.__callMicrotasks(); +} + +export const callMicrotasks = SHOULD_BE_USE_WEB + ? () => { + // on web flushing is a noop as immediates are handled by the browser + } + : callMicrotasksOnUIThread; + +/** + * Lets you schedule a function to be executed on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * + * - The callback executes asynchronously and doesn't return a value. + * - Passed function and args are automatically + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * and serialized. + * - This function cannot be called from the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime) + * or [Worker + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worker-worklet-runtime---worker-runtime), + * unless you have the [Bundle Mode](/docs/experimental/bundleMode) enabled. + * + * @param fun - A reference to a function you want to schedule on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * @param args - Arguments to pass to the function. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnUI + */ +export function scheduleOnUI( worklet: (...args: Args) => ReturnValue, + ...args: Args +): void { + runOnUI(worklet)(...args); +} + +/** + * Lets you asynchronously run + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). + * + * This method does not schedule the work immediately but instead waits for + * other worklets to be scheduled within the same JS loop. It uses + * queueMicrotask to schedule all the worklets at once making sure they will run + * within the same frame boundaries on the UI thread. + * + * @param fun - A reference to a function you want to execute on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/) + * from the [JavaScript + * thread](https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI/). + * @returns A function that accepts arguments for the function passed as the + * first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUI @deprecated Use `scheduleOnUI` instead. + */ +// @ts-expect-error This overload is correct since it's what user sees in his code +// before it's transformed by Reanimated Babel plugin. +export function runOnUI( + worklet: (...args: Args) => ReturnValue +): (...args: Args) => void; + +export function runOnUI( + worklet: WorkletFunction +): (...args: Args) => void { + if ( + __DEV__ && + !SHOULD_BE_USE_WEB && + !isWorkletFunction(worklet) && + !(worklet as unknown as WorkletImport).__bundleData + ) { + throw new WorkletsError('`runOnUI` can only be used with worklets.'); + } + return (...args) => { + if (IS_JEST) { + // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask + // callbacks run on the same queue and can be interleaved. There is no way + // to flush particular queue in Jest and the only control over mocked timers + // is by using jest.advanceTimersByTime() method which advances all types + // of timers including immediate and animation callbacks. Ideally we'd like + // to have some way here to schedule work along with React updates, but + // that's not possible, and hence in Jest environment instead of using scheduling + // mechanism we just schedule the work ommiting the queue. This is ok for the + // uses that we currently have but may not be ok for future tests that we write. + WorkletsModule.scheduleOnUI( + createSerializable(() => { + 'worklet'; + worklet(...args); + }) + ); + return; + } + if (__DEV__) { + // in DEV mode we call serializable conversion here because in case the object + // can't be converted, we will get a meaningful stack-trace as opposed to the + // situation when conversion is only done via microtask queue. This does not + // make the app particularily less efficient as converted objects are cached + // and for a given worklet the conversion only happens once. + createSerializable(worklet); + createSerializable(args); + } + + enqueueUI(worklet, args); + }; +} + +if (__DEV__) { + function runOnUIWorklet(): void { + 'worklet'; + throw new WorkletsError( + '`runOnUI` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.' + ); + } + + const serializableRunOnUIWorklet = createSerializable(runOnUIWorklet); + serializableMappingCache.set(runOnUI, serializableRunOnUIWorklet); +} + +/** + * Lets you run a function synchronously on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime) + * from the [RN + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#react-native-runtime-rn-runtime). + * Passed function and args are automatically + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * and serialized. + * + * - This function cannot be called from the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * - This function cannot be called from a [Worker + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worker-worklet-runtime---worker-runtime). + * + * @param fun - A reference to a function you want to execute on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * @param args - Arguments to pass to the function. + * @returns The return value of the function passed as the first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUISync + */ +export function runOnUISync( + worklet: (...args: Args) => ReturnValue, + ...args: Args +): ReturnValue { + return executeOnUIRuntimeSync(worklet)(...args); +} + +// @ts-expect-error Check `executeOnUIRuntimeSync` overload above. +export function executeOnUIRuntimeSync( + worklet: (...args: Args) => ReturnValue +): (...args: Args) => ReturnValue; + +export function executeOnUIRuntimeSync( + worklet: WorkletFunction +): (...args: Args) => ReturnValue { + return (...args) => { + return WorkletsModule.executeOnUIRuntimeSync( + createSerializable(() => { + 'worklet'; + const result = worklet(...args); + return makeShareableCloneOnUIRecursive(result); + }) + ); + }; +} + +type ReleaseRemoteFunction = { + (...args: Args): ReturnValue; +}; + +type DevRemoteFunction = { + __remoteFunction: (...args: Args) => ReturnValue; +}; + +type RemoteFunction = + | ReleaseRemoteFunction + | DevRemoteFunction; + +function runWorkletOnJS( + worklet: WorkletFunction, + ...args: Args +): void { + // remote function that calls a worklet synchronously on the JS runtime + worklet(...args); +} + +/** + * Lets you asynchronously run + * non-[workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions that couldn't otherwise run on the [UI + * thread](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-thread). + * This applies to most external libraries as they don't have their functions + * marked with "worklet"; directive. + * + * @param fun - A reference to a function you want to execute on the JavaScript + * thread from the UI thread. + * @returns A function that accepts arguments for the function passed as the + * first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnJS + */ +/** @deprecated Use `scheduleOnRN` instead. */ +export function runOnJS( + fun: + | ((...args: Args) => ReturnValue) + | RemoteFunction + | WorkletFunction +): (...args: Args) => void { + 'worklet'; + type FunDevRemote = Extract>; + if ( + SHOULD_BE_USE_WEB || + globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative + ) { + // if we are already on the JS thread, we just schedule the worklet on the JS queue + return (...args) => + queueMicrotask( + args.length + ? () => (fun as (...args: Args) => ReturnValue)(...args) + : (fun as () => ReturnValue) + ); + } + if (isWorkletFunction(fun)) { + // If `fun` is a worklet, we schedule a call of a remote function `runWorkletOnJS` + // and pass the worklet as a first argument followed by original arguments. + + return (...args) => + runOnJS(runWorkletOnJS)( + fun as WorkletFunction, + ...args + ); + } + if ((fun as FunDevRemote).__remoteFunction) { + // In development mode the function provided as `fun` throws an error message + // such that when someone accidentally calls it directly on the UI runtime, they + // see that they should use `runOnJS` instead. To facilitate that we put the + // reference to the original remote function in the `__remoteFunction` property. + fun = (fun as FunDevRemote).__remoteFunction; + } + + const scheduleOnJS = + typeof fun === 'function' + ? global._scheduleHostFunctionOnJS + : global._scheduleRemoteFunctionOnJS; + + return (...args) => { + scheduleOnJS( + fun as + | ((...args: Args) => ReturnValue) + | WorkletFunction, + args.length > 0 ? makeShareableCloneOnUIRecursive(args) : undefined + ); + }; +} + +/** + * Lets you schedule a function to be executed on the RN runtime from any + * runtime. Check + * {@link https://docs.swmansion.com/react-native-worklets/docs/fundamentals/runtimeKinds} + * for more information about the different runtime kinds. + * + * Scheduling function from the RN Runtime (we are already on RN Runtime) simply + * uses `queueMicrotask`. + * + * When functions need to be scheduled from the UI Runtime, first function and + * args are serialized and then the system passes the scheduling responsibility + * to the JSScheduler. The JSScheduler then uses the RN CallInvoker to schedule + * the function asynchronously on the JavaScript thread by calling + * `jsCallInvoker_->invokeAsync()`. + * + * When called from a Worker Runtime, it uses the same JSScheduler mechanism. + * + * @param fun - A function you want to schedule on the RN runtime. A function + * can be a worklet, a remote function or a regular function. + * @param args - Arguments to pass to the function. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/scheduleOnRN + */ +export function scheduleOnRN( + fun: + | ((...args: Args) => ReturnValue) + | RemoteFunction + | WorkletFunction, + ...args: Args +): void { + 'worklet'; + runOnJS(fun)(...args); +} + +/** + * Lets you asynchronously run + * [workletized](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#to-workletize) + * functions on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * + * This method does not schedule the work immediately but instead waits for + * other worklets to be scheduled within the same JS loop. It uses + * queueMicrotask to schedule all the worklets at once making sure they will run + * within the same frame boundaries on the UI thread. + * + * @param fun - A reference to a function you want to execute on the [UI + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#ui-runtime). + * from the [JavaScript + * Runtime](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#javascript-runtime). + * @returns A promise that resolves to the return value of the function passed + * as the first argument. + * @see https://docs.swmansion.com/react-native-worklets/docs/threading/runOnUIAsync + */ +export function runOnUIAsync( + worklet: (...args: Args) => ReturnValue +): (...args: Args) => Promise { + if (__DEV__ && !SHOULD_BE_USE_WEB && !isWorkletFunction(worklet)) { + throw new WorkletsError('`runOnUIAsync` can only be used with worklets.'); + } + return (...args: Args) => { + return new Promise((resolve) => { + if (IS_JEST) { + // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask + // callbacks run on the same queue and can be interleaved. There is no way + // to flush particular queue in Jest and the only control over mocked timers + // is by using jest.advanceTimersByTime() method which advances all types + // of timers including immediate and animation callbacks. Ideally we'd like + // to have some way here to schedule work along with React updates, but + // that's not possible, and hence in Jest environment instead of using scheduling + // mechanism we just schedule the work ommiting the queue. This is ok for the + // uses that we currently have but may not be ok for future tests that we write. + WorkletsModule.scheduleOnUI( + createSerializable(() => { + 'worklet'; + worklet(...args); + }) + ); + return; + } + if (__DEV__) { + // in DEV mode we call serializable conversion here because in case the object + // can't be converted, we will get a meaningful stack-trace as opposed to the + // situation when conversion is only done via microtask queue. This does not + // make the app particularily less efficient as converted objects are cached + // and for a given worklet the conversion only happens once. + createSerializable(worklet); + createSerializable(args); + } + + enqueueUI(worklet as WorkletFunction, args, resolve); + }); + }; +} + +if (__DEV__) { + function runOnUIAsyncWorklet(): void { + 'worklet'; + throw new WorkletsError( + '`runOnUIAsync` cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.' + ); + } + + const serializableRunOnUIAsyncWorklet = + createSerializable(runOnUIAsyncWorklet); + serializableMappingCache.set(runOnUIAsync, serializableRunOnUIAsyncWorklet); +} + +function enqueueUI( + worklet: WorkletFunction, args: Args, resolve?: (value: ReturnValue) => void ): void { @@ -89,22 +421,32 @@ function flushUIQueue(): void { queueMicrotask(() => { const queue = runOnUIQueue; runOnUIQueue = []; - requestAnimationFrameImpl(() => { - queue.forEach(([workletFunction, workletArgs, jobResolve]) => { - const result = workletFunction(...workletArgs); - if (jobResolve) { - jobResolve(result); - } - }); - }); + WorkletsModule.scheduleOnUI( + createSerializable(() => { + 'worklet'; + queue.forEach(([workletFunction, workletArgs, jobResolve]) => { + const result = workletFunction(...workletArgs); + if (jobResolve) { + runOnJS(jobResolve)(result); + } + }); + callMicrotasks(); + }) + ); }); } +/** + * Added temporarily for integration with `react-native-audio-api`. Don't depend + * on this API as it may change without notice. + */ // eslint-disable-next-line camelcase -export function unstable_eventLoopTask(): never { - throw new WorkletsError('`unstable_eventLoopTask` is not supported on web.'); +export function unstable_eventLoopTask( + worklet: (...args: TArgs) => TRet +) { + return (...args: TArgs) => { + 'worklet'; + worklet(...args); + callMicrotasks(); + }; } - -const requestAnimationFrameImpl = !globalThis.requestAnimationFrame - ? mockedRequestAnimationFrame - : globalThis.requestAnimationFrame; diff --git a/frontend-admin/node_modules/react-native-worklets/src/types.ts b/frontend-admin/node_modules/react-native-worklets/src/types.ts deleted file mode 100644 index 8a3f4859..00000000 --- a/frontend-admin/node_modules/react-native-worklets/src/types.ts +++ /dev/null @@ -1,151 +0,0 @@ -/* eslint-disable reanimated/use-global-this */ -'use strict'; - -import type { RuntimeKind } from './runtimeKind'; - -/** Public globals to be exposed to the user. */ -declare global { - /** - * @deprecated Use {@link __RUNTIME_KIND} instead. - * - * This global variable is a diagnostic/development tool. - * - * It's `true` on Worklet Runtimes and `false` on React Native Runtime. - */ - var _WORKLET: boolean | undefined; - - /** - * This ArrayBuffer contains the memory address of `jsi::Runtime` which is the - * Reanimated UI runtime. - */ - var _WORKLET_RUNTIME: ArrayBuffer; - - /** @deprecated Don't use. */ - var _IS_FABRIC: boolean | undefined; - - /** - * This global variable is used to determine the kind of the current runtime. - * You can use it directly to differentiate between runtimes. However, the - * recommended way for differentiating is to use the {@link getRuntimeKind} - * function. - * - * - Value _1_: React Native Runtime - * - Value _2_: UI Worklet Runtime - * - Value _3_: Worker Worklet Runtime - */ - var __RUNTIME_KIND: RuntimeKind | 1 | 2 | 3; -} - -export type WorkletRuntime = { - __hostObjectWorkletRuntime: never; - readonly name: string; -}; - -export type WorkletStackDetails = [ - error: Error, - lineOffset: number, - columnOffset: number, -]; - -export type WorkletClosure = Record; - -interface WorkletInitData { - code: string; - /** Only in dev builds. */ - location?: string; - /** Only in dev builds. */ - sourceMap?: string; -} - -interface WorkletProps { - __closure: WorkletClosure; - __workletHash: number; - /** Only in Legacy Bundling. */ - __initData?: WorkletInitData; - /** Only for Handles. */ - __init?: () => unknown; - /** `__stackDetails` is removed after parsing. */ - __stackDetails?: WorkletStackDetails; - /** Only in dev builds. */ - __pluginVersion?: string; -} - -export type WorkletFunction< - TArgs extends unknown[] = unknown[], - TReturn = unknown, -> = ((...args: TArgs) => TReturn) & WorkletProps; - -export interface WorkletFactory< - TArgs extends unknown[] = unknown[], - TReturn = unknown, - TClosureVariables extends Record = Record, -> { - (closureVariables: TClosureVariables): WorkletFunction; -} - -export type ValueUnpacker = WorkletFunction< - [objectToUnpack: unknown, category?: string], - unknown ->; - -export interface WorkletImport { - __bundleData: { - /** Name of the module which is the source of the import. */ - source: string; - /** The name of the imported value. */ - imported: string; - }; -} - -/** Configuration object for creating a worklet runtime. */ -export type WorkletRuntimeConfig = { - /** The name of the worklet runtime. */ - name?: string; - /** - * A worklet that will be run immediately after the runtime is created and - * before any other worklets. - */ - initializer?: () => void; - /** - * Time interval in milliseconds between polling of frame callbacks scheduled - * by requestAnimationFrame. If not specified, it defaults to 16 ms. - */ - animationQueuePollingRate?: number; - /** - * Determines whether to enable the default Event Loop or not. The Event Loop - * provides implementations for `setTimeout`, `setImmediate`, `setInterval`, - * `requestAnimationFrame`, `queueMicrotask`, `clearTimeout`, `clearInterval`, - * `clearImmediate`, and `cancelAnimationFrame` methods. If not specified, it - * defaults to `true`. - */ - enableEventLoop?: true; -} & ( - | { - /** - * If true, the runtime will use the default queue implementation for - * scheduling worklets. Defaults to true. - */ - useDefaultQueue?: true; - /** - * An optional custom queue to be used for scheduling worklets. - * - * The queue has to implement the C++ `AsyncQueue` interface from - * ``. - */ - customQueue?: never; - } - | { - /** - * If true, the runtime will use the default queue implementation for - * scheduling worklets. Defaults to true. - */ - useDefaultQueue: false; - /** - * An optional custom queue to be used for scheduling worklets. - * - * The queue has to implement the C++ `AsyncQueue` interface from - * ``. - */ - customQueue?: object; - } -); diff --git a/frontend-admin/node_modules/react-native-worklets/src/workletFunction.ts b/frontend-admin/node_modules/react-native-worklets/src/workletFunction.ts index e258144f..9e95fe16 100644 --- a/frontend-admin/node_modules/react-native-worklets/src/workletFunction.ts +++ b/frontend-admin/node_modules/react-native-worklets/src/workletFunction.ts @@ -1,11 +1,12 @@ 'use strict'; -import type { WorkletFunction } from './types'; +import type { WorkletFunction } from './workletTypes'; /** * This function allows you to determine if a given function is a worklet. It - * only works with Worklets Babel plugin enabled. Unless you are doing something - * with internals of Worklets you shouldn't need to use this function. + * only works with Reanimated Babel plugin enabled. Unless you are doing + * something with internals of Reanimated you shouldn't need to use this + * function. * * ### Note * diff --git a/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts b/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts index 5242d81f..924bdad4 100644 --- a/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts +++ b/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts @@ -5,6 +5,7 @@ import { TarOptions } from './options.js'; import { PathReservations } from './path-reservations.js'; import { ReadEntry } from './read-entry.js'; import { WarnData } from './warn-method.js'; +import { SymlinkError } from './symlink-error.js'; declare const ONENTRY: unique symbol; declare const CHECKFS: unique symbol; declare const CHECKFS2: unique symbol; @@ -15,6 +16,7 @@ declare const DIRECTORY: unique symbol; declare const LINK: unique symbol; declare const SYMLINK: unique symbol; declare const HARDLINK: unique symbol; +declare const ENSURE_NO_SYMLINK: unique symbol; declare const UNSUPPORTED: unique symbol; declare const CHECKPATH: unique symbol; declare const STRIPABSOLUTEPATH: unique symbol; @@ -75,6 +77,7 @@ export declare class Unpack extends Parser { [UNSUPPORTED](entry: ReadEntry): void; [SYMLINK](entry: ReadEntry, done: () => void): void; [HARDLINK](entry: ReadEntry, done: () => void): void; + [ENSURE_NO_SYMLINK](entry: ReadEntry, cwd: string, parts: string[], done: () => void, onError: (er: SymlinkError) => void): void; [PEND](): void; [UNPEND](): void; [SKIP](entry: ReadEntry): void; @@ -91,6 +94,7 @@ export declare class UnpackSync extends Unpack { [FILE](entry: ReadEntry, done: () => void): void; [DIRECTORY](entry: ReadEntry, done: () => void): void; [MKDIR](dir: string, mode: number): unknown; + [ENSURE_NO_SYMLINK](_entry: ReadEntry, cwd: string, parts: string[], done: () => void, onError: (er: SymlinkError) => void): void; [LINK](entry: ReadEntry, linkpath: string, link: 'link' | 'symlink', done: () => void): void; } export {}; diff --git a/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts.map b/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts.map index 448a4dc8..a16d1168 100644 --- a/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts.map +++ b/frontend-admin/node_modules/tar/dist/commonjs/unpack.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"unpack.d.ts","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"unpack.d.ts","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/tar/dist/commonjs/unpack.js b/frontend-admin/node_modules/tar/dist/commonjs/unpack.js index 73ad5f9b..dce46531 100644 --- a/frontend-admin/node_modules/tar/dist/commonjs/unpack.js +++ b/frontend-admin/node_modules/tar/dist/commonjs/unpack.js @@ -54,6 +54,8 @@ const parse_js_1 = require("./parse.js"); const strip_absolute_path_js_1 = require("./strip-absolute-path.js"); const wc = __importStar(require("./winchars.js")); const path_reservations_js_1 = require("./path-reservations.js"); +const symlink_error_js_1 = require("./symlink-error.js"); +const process_umask_js_1 = require("./process-umask.js"); const ONENTRY = Symbol('onEntry'); const CHECKFS = Symbol('checkFs'); const CHECKFS2 = Symbol('checkFs2'); @@ -64,6 +66,7 @@ const DIRECTORY = Symbol('directory'); const LINK = Symbol('link'); const SYMLINK = Symbol('symlink'); const HARDLINK = Symbol('hardlink'); +const ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink'); const UNSUPPORTED = Symbol('unsupported'); const CHECKPATH = Symbol('checkPath'); const STRIPABSOLUTEPATH = Symbol('stripAbsolutePath'); @@ -226,7 +229,7 @@ class Unpack extends parse_js_1.Parser { this.processUmask = !this.chmod ? 0 : typeof opt.processUmask === 'number' ? opt.processUmask - : process.umask(); + : (0, process_umask_js_1.umask)(); this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask; // default mode for dirs created as parents @@ -301,6 +304,7 @@ class Unpack extends parse_js_1.Parser { } return true; } + // no IO, just string checking for absolute indicators [CHECKPATH](entry) { const p = (0, normalize_windows_path_js_1.normalizeWindowsPath)(entry.path); const parts = p.split('/'); @@ -561,11 +565,33 @@ class Unpack extends parse_js_1.Parser { entry.resume(); } [SYMLINK](entry, done) { - this[LINK](entry, String(entry.linkpath), 'symlink', done); + const parts = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.relative(this.cwd, node_path_1.default.resolve(node_path_1.default.dirname(String(entry.absolute)), String(entry.linkpath)))).split('/'); + this[ENSURE_NO_SYMLINK](entry, this.cwd, parts, () => this[LINK](entry, String(entry.linkpath), 'symlink', done), er => { + this[ONERROR](er, entry); + done(); + }); } [HARDLINK](entry, done) { const linkpath = (0, normalize_windows_path_js_1.normalizeWindowsPath)(node_path_1.default.resolve(this.cwd, String(entry.linkpath))); - this[LINK](entry, linkpath, 'link', done); + const parts = (0, normalize_windows_path_js_1.normalizeWindowsPath)(String(entry.linkpath)).split('/'); + this[ENSURE_NO_SYMLINK](entry, this.cwd, parts, () => this[LINK](entry, linkpath, 'link', done), er => { + this[ONERROR](er, entry); + done(); + }); + } + [ENSURE_NO_SYMLINK](entry, cwd, parts, done, onError) { + const p = parts.shift(); + if (this.preservePaths || p === undefined) + return done(); + const t = node_path_1.default.resolve(cwd, p); + node_fs_1.default.lstat(t, (er, st) => { + if (er) + return done(); + if (st?.isSymbolicLink()) { + return onError(new symlink_error_js_1.SymlinkError(t, node_path_1.default.resolve(t, parts.join('/')))); + } + this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError); + }); } [PEND]() { this[PENDING]++; @@ -699,7 +725,6 @@ class Unpack extends parse_js_1.Parser { } } [LINK](entry, linkpath, link, done) { - // XXX: get the type ('symlink' or 'junction') for windows node_fs_1.default[link](linkpath, String(entry.absolute), er => { if (er) { this[ONERROR](er, entry); @@ -901,10 +926,25 @@ class UnpackSync extends Unpack { return er; } } + [ENSURE_NO_SYMLINK](_entry, cwd, parts, done, onError) { + if (this.preservePaths || !parts.length) + return done(); + let t = cwd; + for (const p of parts) { + t = node_path_1.default.resolve(t, p); + const [er, st] = callSync(() => node_fs_1.default.lstatSync(t)); + if (er) + return done(); + if (st.isSymbolicLink()) { + return onError(new symlink_error_js_1.SymlinkError(t, node_path_1.default.resolve(cwd, parts.join('/')))); + } + } + done(); + } [LINK](entry, linkpath, link, done) { - const ls = `${link}Sync`; + const linkSync = `${link}Sync`; try { - node_fs_1.default[ls](linkpath, String(entry.absolute)); + node_fs_1.default[linkSync](linkpath, String(entry.absolute)); done(); entry.resume(); } diff --git a/frontend-admin/node_modules/tar/dist/commonjs/unpack.js.map b/frontend-admin/node_modules/tar/dist/commonjs/unpack.js.map index 5251da3c..f2ded835 100644 --- a/frontend-admin/node_modules/tar/dist/commonjs/unpack.js.map +++ b/frontend-admin/node_modules/tar/dist/commonjs/unpack.js.map @@ -1 +1 @@ -{"version":3,"file":"unpack.js","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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","sourcesContent":["// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nimport * as fsm from '@isaacs/fs-minipass'\nimport assert from 'node:assert'\nimport { randomBytes } from 'node:crypto'\nimport fs, { type Stats } from 'node:fs'\nimport path from 'node:path'\nimport { getWriteFlag } from './get-write-flag.js'\nimport { mkdir, MkdirError, mkdirSync } from './mkdir.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { Parser } from './parse.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport * as wc from './winchars.js'\n\nimport { TarOptions } from './options.js'\nimport { PathReservations } from './path-reservations.js'\nimport { ReadEntry } from './read-entry.js'\nimport { WarnData } from './warn-method.js'\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst STRIPABSOLUTEPATH = Symbol('stripAbsolutePath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst platform =\n process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (\n path: string,\n cb: (er?: Error | null) => void,\n) => {\n if (!isWindows) {\n return fs.unlink(path, cb)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.rename(path, name, er => {\n if (er) {\n return cb(er)\n }\n fs.unlink(name, cb)\n })\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst unlinkFileSync = (path: string) => {\n if (!isWindows) {\n return fs.unlinkSync(path)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.renameSync(path, name)\n fs.unlinkSync(name)\n}\n/* c8 ignore stop */\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (\n a: number | undefined,\n b: number | undefined,\n c: number | undefined,\n) =>\n a !== undefined && a === a >>> 0 ? a\n : b !== undefined && b === b >>> 0 ? b\n : c\n\nexport class Unpack extends Parser {\n [ENDED]: boolean = false;\n [CHECKED_CWD]: boolean = false;\n [PENDING]: number = 0\n\n reservations: PathReservations = new PathReservations()\n transform?: TarOptions['transform']\n writable: true = true\n readable: false = false\n uid?: number\n gid?: number\n setOwner: boolean\n preserveOwner: boolean\n processGid?: number\n processUid?: number\n maxDepth: number\n forceChown: boolean\n win32: boolean\n newer: boolean\n keep: boolean\n noMtime: boolean\n preservePaths: boolean\n unlink: boolean\n cwd: string\n strip: number\n processUmask: number\n umask: number\n dmode: number\n fmode: number\n chmod: boolean\n\n constructor(opt: TarOptions = {}) {\n opt.ondone = () => {\n this[ENDED] = true\n this[MAYBECLOSE]()\n }\n\n super(opt)\n\n this.transform = opt.transform\n\n this.chmod = !!opt.chmod\n\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (\n typeof opt.uid !== 'number' ||\n typeof opt.gid !== 'number'\n ) {\n throw new TypeError(\n 'cannot set owner without number uid and gid',\n )\n }\n if (opt.preserveOwner) {\n throw new TypeError(\n 'cannot preserve owner in archive and also set owner explicitly',\n )\n }\n this.uid = opt.uid\n this.gid = opt.gid\n this.setOwner = true\n } else {\n this.uid = undefined\n this.gid = undefined\n this.setOwner = false\n }\n\n // default true for root\n if (\n opt.preserveOwner === undefined &&\n typeof opt.uid !== 'number'\n ) {\n this.preserveOwner = !!(\n process.getuid && process.getuid() === 0\n )\n } else {\n this.preserveOwner = !!opt.preserveOwner\n }\n\n this.processUid =\n (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid()\n : undefined\n this.processGid =\n (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid()\n : undefined\n\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth =\n typeof opt.maxDepth === 'number' ?\n opt.maxDepth\n : DEFAULT_MAX_DEPTH\n\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true\n\n // turn > this[ONENTRY](entry))\n }\n\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn(code: string, msg: string | Error, data: WarnData = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false\n }\n return super.warn(code, msg, data)\n }\n\n [MAYBECLOSE]() {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish')\n this.emit('finish')\n this.emit('end')\n }\n }\n\n // return false if we need to skip this file\n // return true if the field was successfully sanitized\n [STRIPABSOLUTEPATH](\n entry: ReadEntry,\n field: 'path' | 'linkpath',\n ): boolean {\n const p = entry[field]\n const { type } = entry\n if (!p || this.preservePaths) return true\n\n const parts = p.split('/')\n\n if (\n parts.includes('..') ||\n /* c8 ignore next */\n (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))\n ) {\n // For linkpath, check if the resolved path escapes cwd rather than\n // just rejecting any path with '..' - relative symlinks like\n // '../sibling/file' are valid if they resolve within the cwd.\n // For paths, they just simply may not ever use .. at all.\n if (field === 'path' || type === 'Link') {\n this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, {\n entry,\n [field]: p,\n })\n // not ok!\n return false\n } else {\n // Resolve linkpath relative to the entry's directory.\n // `path.posix` is safe to use because we're operating on\n // tar paths, not a filesystem.\n const entryDir = path.posix.dirname(entry.path)\n const resolved = path.posix.normalize(\n path.posix.join(entryDir, p),\n )\n // If the resolved path escapes (starts with ..), reject it\n if (resolved.startsWith('../') || resolved === '..') {\n this.warn(\n 'TAR_ENTRY_ERROR',\n `${field} escapes extraction directory`,\n {\n entry,\n [field]: p,\n },\n )\n return false\n }\n }\n }\n\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p)\n if (root) {\n // ok, but triggers warning about stripping root\n entry[field] = String(stripped)\n this.warn(\n 'TAR_ENTRY_INFO',\n `stripping ${root} from absolute ${field}`,\n {\n entry,\n [field]: p,\n },\n )\n }\n return true\n }\n\n [CHECKPATH](entry: ReadEntry) {\n const p = normalizeWindowsPath(entry.path)\n const parts = p.split('/')\n\n if (this.strip) {\n if (parts.length < this.strip) {\n return false\n }\n if (entry.type === 'Link') {\n const linkparts = normalizeWindowsPath(\n String(entry.linkpath),\n ).split('/')\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/')\n } else {\n return false\n }\n }\n parts.splice(0, this.strip)\n entry.path = parts.join('/')\n }\n\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n })\n return false\n }\n\n if (\n !this[STRIPABSOLUTEPATH](entry, 'path') ||\n !this[STRIPABSOLUTEPATH](entry, 'linkpath')\n ) {\n return false\n }\n\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normalizeWindowsPath(path.resolve(entry.path))\n } else {\n entry.absolute = normalizeWindowsPath(\n path.resolve(this.cwd, entry.path),\n )\n }\n\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* c8 ignore start - defense in depth */\n if (\n !this.preservePaths &&\n typeof entry.absolute === 'string' &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd\n ) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normalizeWindowsPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n })\n return false\n }\n /* c8 ignore stop */\n\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (\n entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir'\n ) {\n return false\n }\n\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(String(entry.absolute))\n entry.absolute =\n aRoot + wc.encode(String(entry.absolute).slice(aRoot.length))\n const { root: pRoot } = path.win32.parse(entry.path)\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n }\n\n return true\n }\n\n [ONENTRY](entry: ReadEntry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume()\n }\n\n assert.equal(typeof entry.absolute, 'string')\n\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700\n }\n\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry)\n\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry)\n }\n }\n\n [ONERROR](er: Error, entry: ReadEntry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er)\n } else {\n this.warn('TAR_ENTRY_ERROR', er, { entry })\n this[UNPEND]()\n entry.resume()\n }\n }\n\n [MKDIR](\n dir: string,\n mode: number,\n cb: (er?: null | MkdirError, made?: string) => void,\n ) {\n mkdir(\n normalizeWindowsPath(dir),\n {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n },\n cb,\n )\n }\n\n [DOCHOWN](entry: ReadEntry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return (\n this.forceChown ||\n (this.preserveOwner &&\n ((typeof entry.uid === 'number' &&\n entry.uid !== this.processUid) ||\n (typeof entry.gid === 'number' &&\n entry.gid !== this.processGid))) ||\n (typeof this.uid === 'number' &&\n this.uid !== this.processUid) ||\n (typeof this.gid === 'number' && this.gid !== this.processGid)\n )\n }\n\n [UID](entry: ReadEntry) {\n return uint32(this.uid, entry.uid, this.processUid)\n }\n\n [GID](entry: ReadEntry) {\n return uint32(this.gid, entry.gid, this.processGid)\n }\n\n [FILE](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n const stream = new fsm.WriteStream(String(entry.absolute), {\n // slight lie, but it can be numeric flags\n flags: getWriteFlag(entry.size) as string,\n mode: mode,\n autoClose: false,\n })\n stream.on('error', (er: Error) => {\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true\n this[ONERROR](er, entry)\n fullyDone()\n })\n\n let actions = 1\n const done = (er?: null | Error) => {\n if (er) {\n /* c8 ignore start - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n /* c8 ignore stop */\n\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n if (--actions === 0) {\n if (stream.fd !== undefined) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n }\n fullyDone()\n })\n }\n }\n }\n\n stream.on('finish', () => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = String(entry.absolute)\n const fd = stream.fd\n\n if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n actions++\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n fs.futimes(fd, atime, mtime, er =>\n er ?\n fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done(),\n )\n }\n\n if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n actions++\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n if (typeof uid === 'number' && typeof gid === 'number') {\n fs.fchown(fd, uid, gid, er =>\n er ?\n fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done(),\n )\n }\n }\n\n done()\n })\n\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => {\n this[ONERROR](er, entry)\n fullyDone()\n })\n entry.pipe(tx)\n }\n tx.pipe(stream)\n }\n\n [DIRECTORY](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n this[MKDIR](String(entry.absolute), mode, er => {\n if (er) {\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n let actions = 1\n const done = () => {\n if (--actions === 0) {\n fullyDone()\n this[UNPEND]()\n entry.resume()\n }\n }\n\n if (entry.mtime && !this.noMtime) {\n actions++\n fs.utimes(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n done,\n )\n }\n\n if (this[DOCHOWN](entry)) {\n actions++\n fs.chown(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n done,\n )\n }\n\n done()\n })\n }\n\n [UNSUPPORTED](entry: ReadEntry) {\n entry.unsupported = true\n this.warn(\n 'TAR_ENTRY_UNSUPPORTED',\n `unsupported entry type: ${entry.type}`,\n { entry },\n )\n entry.resume()\n }\n\n [SYMLINK](entry: ReadEntry, done: () => void) {\n this[LINK](entry, String(entry.linkpath), 'symlink', done)\n }\n\n [HARDLINK](entry: ReadEntry, done: () => void) {\n const linkpath = normalizeWindowsPath(\n path.resolve(this.cwd, String(entry.linkpath)),\n )\n this[LINK](entry, linkpath, 'link', done)\n }\n\n [PEND]() {\n this[PENDING]++\n }\n\n [UNPEND]() {\n this[PENDING]--\n this[MAYBECLOSE]()\n }\n\n [SKIP](entry: ReadEntry) {\n this[UNPEND]()\n entry.resume()\n }\n\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE](entry: ReadEntry, st: Stats) {\n return (\n entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows\n )\n }\n\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS](entry: ReadEntry) {\n this[PEND]()\n const paths = [entry.path]\n if (entry.linkpath) {\n paths.push(entry.linkpath)\n }\n this.reservations.reserve(paths, done =>\n this[CHECKFS2](entry, done),\n )\n }\n\n [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) {\n const done = (er?: Error) => {\n fullyDone(er)\n }\n\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n this[CHECKED_CWD] = true\n start()\n })\n }\n\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n afterMakeParent()\n })\n }\n }\n afterMakeParent()\n }\n\n const afterMakeParent = () => {\n fs.lstat(String(entry.absolute), (lstatEr, st) => {\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n this[SKIP](entry)\n done()\n return\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const afterChmod = (er?: Error | null | undefined) =>\n this[MAKEFS](er ?? null, entry, done)\n if (!needChmod) {\n return afterChmod()\n }\n return fs.chmod(\n String(entry.absolute),\n Number(entry.mode),\n afterChmod,\n )\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(\n String(entry.absolute),\n (er?: null | Error) =>\n this[MAKEFS](er ?? null, entry, done),\n )\n }\n }\n\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done)\n }\n\n unlinkFile(String(entry.absolute), er =>\n this[MAKEFS](er ?? null, entry, done),\n )\n })\n }\n\n if (this[CHECKED_CWD]) {\n start()\n } else {\n checkCwd()\n }\n }\n\n [MAKEFS](\n er: null | undefined | Error,\n entry: ReadEntry,\n done: () => void,\n ) {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done)\n\n case 'Link':\n return this[HARDLINK](entry, done)\n\n case 'SymbolicLink':\n return this[SYMLINK](entry, done)\n\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done)\n }\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n // XXX: get the type ('symlink' or 'junction') for windows\n fs[link](linkpath, String(entry.absolute), er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n entry.resume()\n }\n done()\n })\n }\n}\n\nconst callSync = (fn: () => any) => {\n try {\n return [null, fn()]\n } catch (er) {\n return [er, null]\n }\n}\n\nexport class UnpackSync extends Unpack {\n sync: true = true;\n\n [MAKEFS](er: null | Error | undefined, entry: ReadEntry) {\n return super[MAKEFS](er, entry, () => {})\n }\n\n [CHECKFS](entry: ReadEntry) {\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode)\n if (er) {\n return this[ONERROR](er as Error, entry)\n }\n this[CHECKED_CWD] = true\n }\n\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode)\n if (mkParent) {\n return this[ONERROR](mkParent as Error, entry)\n }\n }\n }\n\n const [lstatEr, st] = callSync(() =>\n fs.lstatSync(String(entry.absolute)),\n )\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n return this[SKIP](entry)\n }\n\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const [er] =\n needChmod ?\n callSync(() => {\n fs.chmodSync(String(entry.absolute), Number(entry.mode))\n })\n : []\n return this[MAKEFS](er, entry)\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() =>\n fs.rmdirSync(String(entry.absolute)),\n )\n this[MAKEFS](er, entry)\n }\n\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] =\n entry.absolute === this.cwd ?\n []\n : callSync(() => unlinkFileSync(String(entry.absolute)))\n this[MAKEFS](er, entry)\n }\n\n [FILE](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n\n const oner = (er?: null | Error | undefined) => {\n let closeError\n try {\n fs.closeSync(fd)\n } catch (e) {\n closeError = e\n }\n if (er || closeError) {\n this[ONERROR]((er as Error) || closeError, entry)\n }\n done()\n }\n\n let fd: number\n try {\n fd = fs.openSync(\n String(entry.absolute),\n getWriteFlag(entry.size),\n mode,\n )\n /* c8 ignore start - This is only a problem if the file was successfully\n * statted, BUT failed to open. Testing this is annoying, and we\n * already have ample testint for other uses of oner() methods.\n */\n } catch (er) {\n return oner(er as Error)\n }\n /* c8 ignore stop */\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => this[ONERROR](er, entry))\n entry.pipe(tx)\n }\n\n tx.on('data', (chunk: Buffer) => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length)\n } catch (er) {\n oner(er as Error)\n }\n })\n\n tx.on('end', () => {\n let er = null\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n try {\n fs.futimesSync(fd, atime, mtime)\n } catch (futimeser) {\n try {\n fs.utimesSync(String(entry.absolute), atime, mtime)\n } catch (utimeser) {\n er = futimeser\n }\n }\n }\n\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n\n try {\n fs.fchownSync(fd, Number(uid), Number(gid))\n } catch (fchowner) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(uid),\n Number(gid),\n )\n } catch (chowner) {\n er = er || fchowner\n }\n }\n }\n\n oner(er as Error)\n })\n }\n\n [DIRECTORY](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n const er = this[MKDIR](String(entry.absolute), mode)\n if (er) {\n this[ONERROR](er as Error, entry)\n done()\n return\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n )\n /* c8 ignore next */\n } catch (er) {}\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n )\n } catch (er) {}\n }\n done()\n entry.resume()\n }\n\n [MKDIR](dir: string, mode: number) {\n try {\n return mkdirSync(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n })\n } catch (er) {\n return er\n }\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n const ls: `${typeof link}Sync` = `${link}Sync`\n try {\n fs[ls](linkpath, String(entry.absolute))\n done()\n entry.resume()\n } catch (er) {\n return this[ONERROR](er as Error, entry)\n }\n }\n}\n"]} \ No newline at end of file +{"version":3,"file":"unpack.js","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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","sourcesContent":["// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nimport * as fsm from '@isaacs/fs-minipass'\nimport assert from 'node:assert'\nimport { randomBytes } from 'node:crypto'\nimport fs, { type Stats } from 'node:fs'\nimport path from 'node:path'\nimport { getWriteFlag } from './get-write-flag.js'\nimport { mkdir, MkdirError, mkdirSync } from './mkdir.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { Parser } from './parse.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport * as wc from './winchars.js'\n\nimport { TarOptions } from './options.js'\nimport { PathReservations } from './path-reservations.js'\nimport { ReadEntry } from './read-entry.js'\nimport { WarnData } from './warn-method.js'\nimport { SymlinkError } from './symlink-error.js'\nimport { umask } from './process-umask.js'\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst STRIPABSOLUTEPATH = Symbol('stripAbsolutePath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst platform =\n process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (\n path: string,\n cb: (er?: Error | null) => void,\n) => {\n if (!isWindows) {\n return fs.unlink(path, cb)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.rename(path, name, er => {\n if (er) {\n return cb(er)\n }\n fs.unlink(name, cb)\n })\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst unlinkFileSync = (path: string) => {\n if (!isWindows) {\n return fs.unlinkSync(path)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.renameSync(path, name)\n fs.unlinkSync(name)\n}\n/* c8 ignore stop */\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (\n a: number | undefined,\n b: number | undefined,\n c: number | undefined,\n) =>\n a !== undefined && a === a >>> 0 ? a\n : b !== undefined && b === b >>> 0 ? b\n : c\n\nexport class Unpack extends Parser {\n [ENDED]: boolean = false;\n [CHECKED_CWD]: boolean = false;\n [PENDING]: number = 0\n\n reservations: PathReservations = new PathReservations()\n transform?: TarOptions['transform']\n writable: true = true\n readable: false = false\n uid?: number\n gid?: number\n setOwner: boolean\n preserveOwner: boolean\n processGid?: number\n processUid?: number\n maxDepth: number\n forceChown: boolean\n win32: boolean\n newer: boolean\n keep: boolean\n noMtime: boolean\n preservePaths: boolean\n unlink: boolean\n cwd: string\n strip: number\n processUmask: number\n umask: number\n dmode: number\n fmode: number\n chmod: boolean\n\n constructor(opt: TarOptions = {}) {\n opt.ondone = () => {\n this[ENDED] = true\n this[MAYBECLOSE]()\n }\n\n super(opt)\n\n this.transform = opt.transform\n\n this.chmod = !!opt.chmod\n\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (\n typeof opt.uid !== 'number' ||\n typeof opt.gid !== 'number'\n ) {\n throw new TypeError(\n 'cannot set owner without number uid and gid',\n )\n }\n if (opt.preserveOwner) {\n throw new TypeError(\n 'cannot preserve owner in archive and also set owner explicitly',\n )\n }\n this.uid = opt.uid\n this.gid = opt.gid\n this.setOwner = true\n } else {\n this.uid = undefined\n this.gid = undefined\n this.setOwner = false\n }\n\n // default true for root\n if (\n opt.preserveOwner === undefined &&\n typeof opt.uid !== 'number'\n ) {\n this.preserveOwner = !!(\n process.getuid && process.getuid() === 0\n )\n } else {\n this.preserveOwner = !!opt.preserveOwner\n }\n\n this.processUid =\n (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid()\n : undefined\n this.processGid =\n (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid()\n : undefined\n\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth =\n typeof opt.maxDepth === 'number' ?\n opt.maxDepth\n : DEFAULT_MAX_DEPTH\n\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true\n\n // turn > this[ONENTRY](entry))\n }\n\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn(code: string, msg: string | Error, data: WarnData = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false\n }\n return super.warn(code, msg, data)\n }\n\n [MAYBECLOSE]() {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish')\n this.emit('finish')\n this.emit('end')\n }\n }\n\n // return false if we need to skip this file\n // return true if the field was successfully sanitized\n [STRIPABSOLUTEPATH](\n entry: ReadEntry,\n field: 'path' | 'linkpath',\n ): boolean {\n const p = entry[field]\n const { type } = entry\n if (!p || this.preservePaths) return true\n\n const parts = p.split('/')\n\n if (\n parts.includes('..') ||\n /* c8 ignore next */\n (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))\n ) {\n // For linkpath, check if the resolved path escapes cwd rather than\n // just rejecting any path with '..' - relative symlinks like\n // '../sibling/file' are valid if they resolve within the cwd.\n // For paths, they just simply may not ever use .. at all.\n if (field === 'path' || type === 'Link') {\n this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, {\n entry,\n [field]: p,\n })\n // not ok!\n return false\n } else {\n // Resolve linkpath relative to the entry's directory.\n // `path.posix` is safe to use because we're operating on\n // tar paths, not a filesystem.\n const entryDir = path.posix.dirname(entry.path)\n const resolved = path.posix.normalize(\n path.posix.join(entryDir, p),\n )\n // If the resolved path escapes (starts with ..), reject it\n if (resolved.startsWith('../') || resolved === '..') {\n this.warn(\n 'TAR_ENTRY_ERROR',\n `${field} escapes extraction directory`,\n {\n entry,\n [field]: p,\n },\n )\n return false\n }\n }\n }\n\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p)\n if (root) {\n // ok, but triggers warning about stripping root\n entry[field] = String(stripped)\n this.warn(\n 'TAR_ENTRY_INFO',\n `stripping ${root} from absolute ${field}`,\n {\n entry,\n [field]: p,\n },\n )\n }\n return true\n }\n\n // no IO, just string checking for absolute indicators\n [CHECKPATH](entry: ReadEntry) {\n const p = normalizeWindowsPath(entry.path)\n const parts = p.split('/')\n\n if (this.strip) {\n if (parts.length < this.strip) {\n return false\n }\n if (entry.type === 'Link') {\n const linkparts = normalizeWindowsPath(\n String(entry.linkpath),\n ).split('/')\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/')\n } else {\n return false\n }\n }\n parts.splice(0, this.strip)\n entry.path = parts.join('/')\n }\n\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n })\n return false\n }\n\n if (\n !this[STRIPABSOLUTEPATH](entry, 'path') ||\n !this[STRIPABSOLUTEPATH](entry, 'linkpath')\n ) {\n return false\n }\n\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normalizeWindowsPath(path.resolve(entry.path))\n } else {\n entry.absolute = normalizeWindowsPath(\n path.resolve(this.cwd, entry.path),\n )\n }\n\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* c8 ignore start - defense in depth */\n if (\n !this.preservePaths &&\n typeof entry.absolute === 'string' &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd\n ) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normalizeWindowsPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n })\n return false\n }\n /* c8 ignore stop */\n\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (\n entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir'\n ) {\n return false\n }\n\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(String(entry.absolute))\n entry.absolute =\n aRoot + wc.encode(String(entry.absolute).slice(aRoot.length))\n const { root: pRoot } = path.win32.parse(entry.path)\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n }\n\n return true\n }\n\n [ONENTRY](entry: ReadEntry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume()\n }\n\n assert.equal(typeof entry.absolute, 'string')\n\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700\n }\n\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry)\n\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry)\n }\n }\n\n [ONERROR](er: Error, entry: ReadEntry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er)\n } else {\n this.warn('TAR_ENTRY_ERROR', er, { entry })\n this[UNPEND]()\n entry.resume()\n }\n }\n\n [MKDIR](\n dir: string,\n mode: number,\n cb: (er?: null | MkdirError, made?: string) => void,\n ) {\n mkdir(\n normalizeWindowsPath(dir),\n {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n },\n cb,\n )\n }\n\n [DOCHOWN](entry: ReadEntry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return (\n this.forceChown ||\n (this.preserveOwner &&\n ((typeof entry.uid === 'number' &&\n entry.uid !== this.processUid) ||\n (typeof entry.gid === 'number' &&\n entry.gid !== this.processGid))) ||\n (typeof this.uid === 'number' &&\n this.uid !== this.processUid) ||\n (typeof this.gid === 'number' && this.gid !== this.processGid)\n )\n }\n\n [UID](entry: ReadEntry) {\n return uint32(this.uid, entry.uid, this.processUid)\n }\n\n [GID](entry: ReadEntry) {\n return uint32(this.gid, entry.gid, this.processGid)\n }\n\n [FILE](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n const stream = new fsm.WriteStream(String(entry.absolute), {\n // slight lie, but it can be numeric flags\n flags: getWriteFlag(entry.size) as string,\n mode: mode,\n autoClose: false,\n })\n stream.on('error', (er: Error) => {\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true\n this[ONERROR](er, entry)\n fullyDone()\n })\n\n let actions = 1\n const done = (er?: null | Error) => {\n if (er) {\n /* c8 ignore start - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n /* c8 ignore stop */\n\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n if (--actions === 0) {\n if (stream.fd !== undefined) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n }\n fullyDone()\n })\n }\n }\n }\n\n stream.on('finish', () => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = String(entry.absolute)\n const fd = stream.fd\n\n if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n actions++\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n fs.futimes(fd, atime, mtime, er =>\n er ?\n fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done(),\n )\n }\n\n if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n actions++\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n if (typeof uid === 'number' && typeof gid === 'number') {\n fs.fchown(fd, uid, gid, er =>\n er ?\n fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done(),\n )\n }\n }\n\n done()\n })\n\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => {\n this[ONERROR](er, entry)\n fullyDone()\n })\n entry.pipe(tx)\n }\n tx.pipe(stream)\n }\n\n [DIRECTORY](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n this[MKDIR](String(entry.absolute), mode, er => {\n if (er) {\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n let actions = 1\n const done = () => {\n if (--actions === 0) {\n fullyDone()\n this[UNPEND]()\n entry.resume()\n }\n }\n\n if (entry.mtime && !this.noMtime) {\n actions++\n fs.utimes(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n done,\n )\n }\n\n if (this[DOCHOWN](entry)) {\n actions++\n fs.chown(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n done,\n )\n }\n\n done()\n })\n }\n\n [UNSUPPORTED](entry: ReadEntry) {\n entry.unsupported = true\n this.warn(\n 'TAR_ENTRY_UNSUPPORTED',\n `unsupported entry type: ${entry.type}`,\n { entry },\n )\n entry.resume()\n }\n\n [SYMLINK](entry: ReadEntry, done: () => void) {\n const parts = normalizeWindowsPath(\n path.relative(\n this.cwd,\n path.resolve(\n path.dirname(String(entry.absolute)),\n String(entry.linkpath),\n ),\n ),\n ).split('/')\n this[ENSURE_NO_SYMLINK](\n entry,\n this.cwd,\n parts,\n () =>\n this[LINK](entry, String(entry.linkpath), 'symlink', done),\n er => {\n this[ONERROR](er, entry)\n done()\n },\n )\n }\n\n [HARDLINK](entry: ReadEntry, done: () => void) {\n const linkpath = normalizeWindowsPath(\n path.resolve(this.cwd, String(entry.linkpath)),\n )\n const parts = normalizeWindowsPath(String(entry.linkpath)).split(\n '/',\n )\n this[ENSURE_NO_SYMLINK](\n entry,\n this.cwd,\n parts,\n () => this[LINK](entry, linkpath, 'link', done),\n er => {\n this[ONERROR](er, entry)\n done()\n },\n )\n }\n\n [ENSURE_NO_SYMLINK](\n entry: ReadEntry,\n cwd: string,\n parts: string[],\n done: () => void,\n onError: (er: SymlinkError) => void,\n ) {\n const p = parts.shift()\n if (this.preservePaths || p === undefined) return done()\n const t = path.resolve(cwd, p)\n fs.lstat(t, (er, st) => {\n if (er) return done()\n if (st?.isSymbolicLink()) {\n return onError(\n new SymlinkError(t, path.resolve(t, parts.join('/'))),\n )\n }\n this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError)\n })\n }\n\n [PEND]() {\n this[PENDING]++\n }\n\n [UNPEND]() {\n this[PENDING]--\n this[MAYBECLOSE]()\n }\n\n [SKIP](entry: ReadEntry) {\n this[UNPEND]()\n entry.resume()\n }\n\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE](entry: ReadEntry, st: Stats) {\n return (\n entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows\n )\n }\n\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS](entry: ReadEntry) {\n this[PEND]()\n const paths = [entry.path]\n if (entry.linkpath) {\n paths.push(entry.linkpath)\n }\n this.reservations.reserve(paths, done =>\n this[CHECKFS2](entry, done),\n )\n }\n\n [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) {\n const done = (er?: Error) => {\n fullyDone(er)\n }\n\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n this[CHECKED_CWD] = true\n start()\n })\n }\n\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n afterMakeParent()\n })\n }\n }\n afterMakeParent()\n }\n\n const afterMakeParent = () => {\n fs.lstat(String(entry.absolute), (lstatEr, st) => {\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n this[SKIP](entry)\n done()\n return\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const afterChmod = (er?: Error | null | undefined) =>\n this[MAKEFS](er ?? null, entry, done)\n if (!needChmod) {\n return afterChmod()\n }\n return fs.chmod(\n String(entry.absolute),\n Number(entry.mode),\n afterChmod,\n )\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(\n String(entry.absolute),\n (er?: null | Error) =>\n this[MAKEFS](er ?? null, entry, done),\n )\n }\n }\n\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done)\n }\n\n unlinkFile(String(entry.absolute), er =>\n this[MAKEFS](er ?? null, entry, done),\n )\n })\n }\n\n if (this[CHECKED_CWD]) {\n start()\n } else {\n checkCwd()\n }\n }\n\n [MAKEFS](\n er: null | undefined | Error,\n entry: ReadEntry,\n done: () => void,\n ) {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done)\n\n case 'Link':\n return this[HARDLINK](entry, done)\n\n case 'SymbolicLink':\n return this[SYMLINK](entry, done)\n\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done)\n }\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n fs[link](linkpath, String(entry.absolute), er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n entry.resume()\n }\n done()\n })\n }\n}\n\nconst callSync = (\n fn: () => T,\n): [null, T] | [NodeJS.ErrnoException, null] => {\n try {\n return [null, fn()]\n } catch (er) {\n return [er as NodeJS.ErrnoException, null]\n }\n}\n\nexport class UnpackSync extends Unpack {\n sync: true = true;\n\n [MAKEFS](er: null | Error | undefined, entry: ReadEntry) {\n return super[MAKEFS](er, entry, () => {})\n }\n\n [CHECKFS](entry: ReadEntry) {\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode)\n if (er) {\n return this[ONERROR](er as Error, entry)\n }\n this[CHECKED_CWD] = true\n }\n\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode)\n if (mkParent) {\n return this[ONERROR](mkParent as Error, entry)\n }\n }\n }\n\n const [lstatEr, st] = callSync(() =>\n fs.lstatSync(String(entry.absolute)),\n )\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n return this[SKIP](entry)\n }\n\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const [er] =\n needChmod ?\n callSync(() => {\n fs.chmodSync(String(entry.absolute), Number(entry.mode))\n })\n : []\n return this[MAKEFS](er, entry)\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() =>\n fs.rmdirSync(String(entry.absolute)),\n )\n this[MAKEFS](er, entry)\n }\n\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] =\n entry.absolute === this.cwd ?\n []\n : callSync(() => unlinkFileSync(String(entry.absolute)))\n this[MAKEFS](er, entry)\n }\n\n [FILE](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n\n const oner = (er?: null | Error | undefined) => {\n let closeError\n try {\n fs.closeSync(fd)\n } catch (e) {\n closeError = e\n }\n if (er || closeError) {\n this[ONERROR]((er as Error) || closeError, entry)\n }\n done()\n }\n\n let fd: number\n try {\n fd = fs.openSync(\n String(entry.absolute),\n getWriteFlag(entry.size),\n mode,\n )\n /* c8 ignore start - This is only a problem if the file was successfully\n * statted, BUT failed to open. Testing this is annoying, and we\n * already have ample testint for other uses of oner() methods.\n */\n } catch (er) {\n return oner(er as Error)\n }\n /* c8 ignore stop */\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => this[ONERROR](er, entry))\n entry.pipe(tx)\n }\n\n tx.on('data', (chunk: Buffer) => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length)\n } catch (er) {\n oner(er as Error)\n }\n })\n\n tx.on('end', () => {\n let er = null\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n try {\n fs.futimesSync(fd, atime, mtime)\n } catch (futimeser) {\n try {\n fs.utimesSync(String(entry.absolute), atime, mtime)\n } catch (utimeser) {\n er = futimeser\n }\n }\n }\n\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n\n try {\n fs.fchownSync(fd, Number(uid), Number(gid))\n } catch (fchowner) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(uid),\n Number(gid),\n )\n } catch (chowner) {\n er = er || fchowner\n }\n }\n }\n\n oner(er as Error)\n })\n }\n\n [DIRECTORY](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n const er = this[MKDIR](String(entry.absolute), mode)\n if (er) {\n this[ONERROR](er as Error, entry)\n done()\n return\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n )\n /* c8 ignore next */\n } catch (er) {}\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n )\n } catch (er) {}\n }\n done()\n entry.resume()\n }\n\n [MKDIR](dir: string, mode: number) {\n try {\n return mkdirSync(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n })\n } catch (er) {\n return er\n }\n }\n\n [ENSURE_NO_SYMLINK](\n _entry: ReadEntry,\n cwd: string,\n parts: string[],\n done: () => void,\n onError: (er: SymlinkError) => void,\n ) {\n if (this.preservePaths || !parts.length) return done()\n let t = cwd\n for (const p of parts) {\n t = path.resolve(t, p)\n const [er, st] = callSync(() => fs.lstatSync(t))\n if (er) return done()\n if (st.isSymbolicLink()) {\n return onError(\n new SymlinkError(t, path.resolve(cwd, parts.join('/'))),\n )\n }\n }\n done()\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n const linkSync: `${typeof link}Sync` = `${link}Sync`\n try {\n fs[linkSync](linkpath, String(entry.absolute))\n done()\n entry.resume()\n } catch (er) {\n return this[ONERROR](er as Error, entry)\n }\n }\n}\n"]} \ No newline at end of file diff --git a/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts b/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts index 5242d81f..924bdad4 100644 --- a/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts +++ b/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts @@ -5,6 +5,7 @@ import { TarOptions } from './options.js'; import { PathReservations } from './path-reservations.js'; import { ReadEntry } from './read-entry.js'; import { WarnData } from './warn-method.js'; +import { SymlinkError } from './symlink-error.js'; declare const ONENTRY: unique symbol; declare const CHECKFS: unique symbol; declare const CHECKFS2: unique symbol; @@ -15,6 +16,7 @@ declare const DIRECTORY: unique symbol; declare const LINK: unique symbol; declare const SYMLINK: unique symbol; declare const HARDLINK: unique symbol; +declare const ENSURE_NO_SYMLINK: unique symbol; declare const UNSUPPORTED: unique symbol; declare const CHECKPATH: unique symbol; declare const STRIPABSOLUTEPATH: unique symbol; @@ -75,6 +77,7 @@ export declare class Unpack extends Parser { [UNSUPPORTED](entry: ReadEntry): void; [SYMLINK](entry: ReadEntry, done: () => void): void; [HARDLINK](entry: ReadEntry, done: () => void): void; + [ENSURE_NO_SYMLINK](entry: ReadEntry, cwd: string, parts: string[], done: () => void, onError: (er: SymlinkError) => void): void; [PEND](): void; [UNPEND](): void; [SKIP](entry: ReadEntry): void; @@ -91,6 +94,7 @@ export declare class UnpackSync extends Unpack { [FILE](entry: ReadEntry, done: () => void): void; [DIRECTORY](entry: ReadEntry, done: () => void): void; [MKDIR](dir: string, mode: number): unknown; + [ENSURE_NO_SYMLINK](_entry: ReadEntry, cwd: string, parts: string[], done: () => void, onError: (er: SymlinkError) => void): void; [LINK](entry: ReadEntry, linkpath: string, link: 'link' | 'symlink', done: () => void): void; } export {}; diff --git a/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts.map b/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts.map index 448a4dc8..a16d1168 100644 --- a/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts.map +++ b/frontend-admin/node_modules/tar/dist/esm/unpack.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"unpack.d.ts","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"unpack.d.ts","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend-admin/node_modules/tar/dist/esm/unpack.js b/frontend-admin/node_modules/tar/dist/esm/unpack.js index 3a9aa807..1d0b53d1 100644 --- a/frontend-admin/node_modules/tar/dist/esm/unpack.js +++ b/frontend-admin/node_modules/tar/dist/esm/unpack.js @@ -15,6 +15,8 @@ import { Parser } from './parse.js'; import { stripAbsolutePath } from './strip-absolute-path.js'; import * as wc from './winchars.js'; import { PathReservations } from './path-reservations.js'; +import { SymlinkError } from './symlink-error.js'; +import { umask } from './process-umask.js'; const ONENTRY = Symbol('onEntry'); const CHECKFS = Symbol('checkFs'); const CHECKFS2 = Symbol('checkFs2'); @@ -25,6 +27,7 @@ const DIRECTORY = Symbol('directory'); const LINK = Symbol('link'); const SYMLINK = Symbol('symlink'); const HARDLINK = Symbol('hardlink'); +const ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink'); const UNSUPPORTED = Symbol('unsupported'); const CHECKPATH = Symbol('checkPath'); const STRIPABSOLUTEPATH = Symbol('stripAbsolutePath'); @@ -187,7 +190,7 @@ export class Unpack extends Parser { this.processUmask = !this.chmod ? 0 : typeof opt.processUmask === 'number' ? opt.processUmask - : process.umask(); + : umask(); this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask; // default mode for dirs created as parents @@ -262,6 +265,7 @@ export class Unpack extends Parser { } return true; } + // no IO, just string checking for absolute indicators [CHECKPATH](entry) { const p = normalizeWindowsPath(entry.path); const parts = p.split('/'); @@ -522,11 +526,33 @@ export class Unpack extends Parser { entry.resume(); } [SYMLINK](entry, done) { - this[LINK](entry, String(entry.linkpath), 'symlink', done); + const parts = normalizeWindowsPath(path.relative(this.cwd, path.resolve(path.dirname(String(entry.absolute)), String(entry.linkpath)))).split('/'); + this[ENSURE_NO_SYMLINK](entry, this.cwd, parts, () => this[LINK](entry, String(entry.linkpath), 'symlink', done), er => { + this[ONERROR](er, entry); + done(); + }); } [HARDLINK](entry, done) { const linkpath = normalizeWindowsPath(path.resolve(this.cwd, String(entry.linkpath))); - this[LINK](entry, linkpath, 'link', done); + const parts = normalizeWindowsPath(String(entry.linkpath)).split('/'); + this[ENSURE_NO_SYMLINK](entry, this.cwd, parts, () => this[LINK](entry, linkpath, 'link', done), er => { + this[ONERROR](er, entry); + done(); + }); + } + [ENSURE_NO_SYMLINK](entry, cwd, parts, done, onError) { + const p = parts.shift(); + if (this.preservePaths || p === undefined) + return done(); + const t = path.resolve(cwd, p); + fs.lstat(t, (er, st) => { + if (er) + return done(); + if (st?.isSymbolicLink()) { + return onError(new SymlinkError(t, path.resolve(t, parts.join('/')))); + } + this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError); + }); } [PEND]() { this[PENDING]++; @@ -660,7 +686,6 @@ export class Unpack extends Parser { } } [LINK](entry, linkpath, link, done) { - // XXX: get the type ('symlink' or 'junction') for windows fs[link](linkpath, String(entry.absolute), er => { if (er) { this[ONERROR](er, entry); @@ -861,10 +886,25 @@ export class UnpackSync extends Unpack { return er; } } + [ENSURE_NO_SYMLINK](_entry, cwd, parts, done, onError) { + if (this.preservePaths || !parts.length) + return done(); + let t = cwd; + for (const p of parts) { + t = path.resolve(t, p); + const [er, st] = callSync(() => fs.lstatSync(t)); + if (er) + return done(); + if (st.isSymbolicLink()) { + return onError(new SymlinkError(t, path.resolve(cwd, parts.join('/')))); + } + } + done(); + } [LINK](entry, linkpath, link, done) { - const ls = `${link}Sync`; + const linkSync = `${link}Sync`; try { - fs[ls](linkpath, String(entry.absolute)); + fs[linkSync](linkpath, String(entry.absolute)); done(); entry.resume(); } diff --git a/frontend-admin/node_modules/tar/dist/esm/unpack.js.map b/frontend-admin/node_modules/tar/dist/esm/unpack.js.map index efe38c38..62505f35 100644 --- a/frontend-admin/node_modules/tar/dist/esm/unpack.js.map +++ b/frontend-admin/node_modules/tar/dist/esm/unpack.js.map @@ -1 +1 @@ -{"version":3,"file":"unpack.js","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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","sourcesContent":["// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nimport * as fsm from '@isaacs/fs-minipass'\nimport assert from 'node:assert'\nimport { randomBytes } from 'node:crypto'\nimport fs, { type Stats } from 'node:fs'\nimport path from 'node:path'\nimport { getWriteFlag } from './get-write-flag.js'\nimport { mkdir, MkdirError, mkdirSync } from './mkdir.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { Parser } from './parse.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport * as wc from './winchars.js'\n\nimport { TarOptions } from './options.js'\nimport { PathReservations } from './path-reservations.js'\nimport { ReadEntry } from './read-entry.js'\nimport { WarnData } from './warn-method.js'\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst STRIPABSOLUTEPATH = Symbol('stripAbsolutePath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst platform =\n process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (\n path: string,\n cb: (er?: Error | null) => void,\n) => {\n if (!isWindows) {\n return fs.unlink(path, cb)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.rename(path, name, er => {\n if (er) {\n return cb(er)\n }\n fs.unlink(name, cb)\n })\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst unlinkFileSync = (path: string) => {\n if (!isWindows) {\n return fs.unlinkSync(path)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.renameSync(path, name)\n fs.unlinkSync(name)\n}\n/* c8 ignore stop */\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (\n a: number | undefined,\n b: number | undefined,\n c: number | undefined,\n) =>\n a !== undefined && a === a >>> 0 ? a\n : b !== undefined && b === b >>> 0 ? b\n : c\n\nexport class Unpack extends Parser {\n [ENDED]: boolean = false;\n [CHECKED_CWD]: boolean = false;\n [PENDING]: number = 0\n\n reservations: PathReservations = new PathReservations()\n transform?: TarOptions['transform']\n writable: true = true\n readable: false = false\n uid?: number\n gid?: number\n setOwner: boolean\n preserveOwner: boolean\n processGid?: number\n processUid?: number\n maxDepth: number\n forceChown: boolean\n win32: boolean\n newer: boolean\n keep: boolean\n noMtime: boolean\n preservePaths: boolean\n unlink: boolean\n cwd: string\n strip: number\n processUmask: number\n umask: number\n dmode: number\n fmode: number\n chmod: boolean\n\n constructor(opt: TarOptions = {}) {\n opt.ondone = () => {\n this[ENDED] = true\n this[MAYBECLOSE]()\n }\n\n super(opt)\n\n this.transform = opt.transform\n\n this.chmod = !!opt.chmod\n\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (\n typeof opt.uid !== 'number' ||\n typeof opt.gid !== 'number'\n ) {\n throw new TypeError(\n 'cannot set owner without number uid and gid',\n )\n }\n if (opt.preserveOwner) {\n throw new TypeError(\n 'cannot preserve owner in archive and also set owner explicitly',\n )\n }\n this.uid = opt.uid\n this.gid = opt.gid\n this.setOwner = true\n } else {\n this.uid = undefined\n this.gid = undefined\n this.setOwner = false\n }\n\n // default true for root\n if (\n opt.preserveOwner === undefined &&\n typeof opt.uid !== 'number'\n ) {\n this.preserveOwner = !!(\n process.getuid && process.getuid() === 0\n )\n } else {\n this.preserveOwner = !!opt.preserveOwner\n }\n\n this.processUid =\n (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid()\n : undefined\n this.processGid =\n (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid()\n : undefined\n\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth =\n typeof opt.maxDepth === 'number' ?\n opt.maxDepth\n : DEFAULT_MAX_DEPTH\n\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true\n\n // turn > this[ONENTRY](entry))\n }\n\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn(code: string, msg: string | Error, data: WarnData = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false\n }\n return super.warn(code, msg, data)\n }\n\n [MAYBECLOSE]() {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish')\n this.emit('finish')\n this.emit('end')\n }\n }\n\n // return false if we need to skip this file\n // return true if the field was successfully sanitized\n [STRIPABSOLUTEPATH](\n entry: ReadEntry,\n field: 'path' | 'linkpath',\n ): boolean {\n const p = entry[field]\n const { type } = entry\n if (!p || this.preservePaths) return true\n\n const parts = p.split('/')\n\n if (\n parts.includes('..') ||\n /* c8 ignore next */\n (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))\n ) {\n // For linkpath, check if the resolved path escapes cwd rather than\n // just rejecting any path with '..' - relative symlinks like\n // '../sibling/file' are valid if they resolve within the cwd.\n // For paths, they just simply may not ever use .. at all.\n if (field === 'path' || type === 'Link') {\n this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, {\n entry,\n [field]: p,\n })\n // not ok!\n return false\n } else {\n // Resolve linkpath relative to the entry's directory.\n // `path.posix` is safe to use because we're operating on\n // tar paths, not a filesystem.\n const entryDir = path.posix.dirname(entry.path)\n const resolved = path.posix.normalize(\n path.posix.join(entryDir, p),\n )\n // If the resolved path escapes (starts with ..), reject it\n if (resolved.startsWith('../') || resolved === '..') {\n this.warn(\n 'TAR_ENTRY_ERROR',\n `${field} escapes extraction directory`,\n {\n entry,\n [field]: p,\n },\n )\n return false\n }\n }\n }\n\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p)\n if (root) {\n // ok, but triggers warning about stripping root\n entry[field] = String(stripped)\n this.warn(\n 'TAR_ENTRY_INFO',\n `stripping ${root} from absolute ${field}`,\n {\n entry,\n [field]: p,\n },\n )\n }\n return true\n }\n\n [CHECKPATH](entry: ReadEntry) {\n const p = normalizeWindowsPath(entry.path)\n const parts = p.split('/')\n\n if (this.strip) {\n if (parts.length < this.strip) {\n return false\n }\n if (entry.type === 'Link') {\n const linkparts = normalizeWindowsPath(\n String(entry.linkpath),\n ).split('/')\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/')\n } else {\n return false\n }\n }\n parts.splice(0, this.strip)\n entry.path = parts.join('/')\n }\n\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n })\n return false\n }\n\n if (\n !this[STRIPABSOLUTEPATH](entry, 'path') ||\n !this[STRIPABSOLUTEPATH](entry, 'linkpath')\n ) {\n return false\n }\n\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normalizeWindowsPath(path.resolve(entry.path))\n } else {\n entry.absolute = normalizeWindowsPath(\n path.resolve(this.cwd, entry.path),\n )\n }\n\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* c8 ignore start - defense in depth */\n if (\n !this.preservePaths &&\n typeof entry.absolute === 'string' &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd\n ) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normalizeWindowsPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n })\n return false\n }\n /* c8 ignore stop */\n\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (\n entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir'\n ) {\n return false\n }\n\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(String(entry.absolute))\n entry.absolute =\n aRoot + wc.encode(String(entry.absolute).slice(aRoot.length))\n const { root: pRoot } = path.win32.parse(entry.path)\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n }\n\n return true\n }\n\n [ONENTRY](entry: ReadEntry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume()\n }\n\n assert.equal(typeof entry.absolute, 'string')\n\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700\n }\n\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry)\n\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry)\n }\n }\n\n [ONERROR](er: Error, entry: ReadEntry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er)\n } else {\n this.warn('TAR_ENTRY_ERROR', er, { entry })\n this[UNPEND]()\n entry.resume()\n }\n }\n\n [MKDIR](\n dir: string,\n mode: number,\n cb: (er?: null | MkdirError, made?: string) => void,\n ) {\n mkdir(\n normalizeWindowsPath(dir),\n {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n },\n cb,\n )\n }\n\n [DOCHOWN](entry: ReadEntry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return (\n this.forceChown ||\n (this.preserveOwner &&\n ((typeof entry.uid === 'number' &&\n entry.uid !== this.processUid) ||\n (typeof entry.gid === 'number' &&\n entry.gid !== this.processGid))) ||\n (typeof this.uid === 'number' &&\n this.uid !== this.processUid) ||\n (typeof this.gid === 'number' && this.gid !== this.processGid)\n )\n }\n\n [UID](entry: ReadEntry) {\n return uint32(this.uid, entry.uid, this.processUid)\n }\n\n [GID](entry: ReadEntry) {\n return uint32(this.gid, entry.gid, this.processGid)\n }\n\n [FILE](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n const stream = new fsm.WriteStream(String(entry.absolute), {\n // slight lie, but it can be numeric flags\n flags: getWriteFlag(entry.size) as string,\n mode: mode,\n autoClose: false,\n })\n stream.on('error', (er: Error) => {\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true\n this[ONERROR](er, entry)\n fullyDone()\n })\n\n let actions = 1\n const done = (er?: null | Error) => {\n if (er) {\n /* c8 ignore start - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n /* c8 ignore stop */\n\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n if (--actions === 0) {\n if (stream.fd !== undefined) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n }\n fullyDone()\n })\n }\n }\n }\n\n stream.on('finish', () => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = String(entry.absolute)\n const fd = stream.fd\n\n if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n actions++\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n fs.futimes(fd, atime, mtime, er =>\n er ?\n fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done(),\n )\n }\n\n if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n actions++\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n if (typeof uid === 'number' && typeof gid === 'number') {\n fs.fchown(fd, uid, gid, er =>\n er ?\n fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done(),\n )\n }\n }\n\n done()\n })\n\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => {\n this[ONERROR](er, entry)\n fullyDone()\n })\n entry.pipe(tx)\n }\n tx.pipe(stream)\n }\n\n [DIRECTORY](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n this[MKDIR](String(entry.absolute), mode, er => {\n if (er) {\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n let actions = 1\n const done = () => {\n if (--actions === 0) {\n fullyDone()\n this[UNPEND]()\n entry.resume()\n }\n }\n\n if (entry.mtime && !this.noMtime) {\n actions++\n fs.utimes(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n done,\n )\n }\n\n if (this[DOCHOWN](entry)) {\n actions++\n fs.chown(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n done,\n )\n }\n\n done()\n })\n }\n\n [UNSUPPORTED](entry: ReadEntry) {\n entry.unsupported = true\n this.warn(\n 'TAR_ENTRY_UNSUPPORTED',\n `unsupported entry type: ${entry.type}`,\n { entry },\n )\n entry.resume()\n }\n\n [SYMLINK](entry: ReadEntry, done: () => void) {\n this[LINK](entry, String(entry.linkpath), 'symlink', done)\n }\n\n [HARDLINK](entry: ReadEntry, done: () => void) {\n const linkpath = normalizeWindowsPath(\n path.resolve(this.cwd, String(entry.linkpath)),\n )\n this[LINK](entry, linkpath, 'link', done)\n }\n\n [PEND]() {\n this[PENDING]++\n }\n\n [UNPEND]() {\n this[PENDING]--\n this[MAYBECLOSE]()\n }\n\n [SKIP](entry: ReadEntry) {\n this[UNPEND]()\n entry.resume()\n }\n\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE](entry: ReadEntry, st: Stats) {\n return (\n entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows\n )\n }\n\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS](entry: ReadEntry) {\n this[PEND]()\n const paths = [entry.path]\n if (entry.linkpath) {\n paths.push(entry.linkpath)\n }\n this.reservations.reserve(paths, done =>\n this[CHECKFS2](entry, done),\n )\n }\n\n [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) {\n const done = (er?: Error) => {\n fullyDone(er)\n }\n\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n this[CHECKED_CWD] = true\n start()\n })\n }\n\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n afterMakeParent()\n })\n }\n }\n afterMakeParent()\n }\n\n const afterMakeParent = () => {\n fs.lstat(String(entry.absolute), (lstatEr, st) => {\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n this[SKIP](entry)\n done()\n return\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const afterChmod = (er?: Error | null | undefined) =>\n this[MAKEFS](er ?? null, entry, done)\n if (!needChmod) {\n return afterChmod()\n }\n return fs.chmod(\n String(entry.absolute),\n Number(entry.mode),\n afterChmod,\n )\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(\n String(entry.absolute),\n (er?: null | Error) =>\n this[MAKEFS](er ?? null, entry, done),\n )\n }\n }\n\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done)\n }\n\n unlinkFile(String(entry.absolute), er =>\n this[MAKEFS](er ?? null, entry, done),\n )\n })\n }\n\n if (this[CHECKED_CWD]) {\n start()\n } else {\n checkCwd()\n }\n }\n\n [MAKEFS](\n er: null | undefined | Error,\n entry: ReadEntry,\n done: () => void,\n ) {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done)\n\n case 'Link':\n return this[HARDLINK](entry, done)\n\n case 'SymbolicLink':\n return this[SYMLINK](entry, done)\n\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done)\n }\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n // XXX: get the type ('symlink' or 'junction') for windows\n fs[link](linkpath, String(entry.absolute), er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n entry.resume()\n }\n done()\n })\n }\n}\n\nconst callSync = (fn: () => any) => {\n try {\n return [null, fn()]\n } catch (er) {\n return [er, null]\n }\n}\n\nexport class UnpackSync extends Unpack {\n sync: true = true;\n\n [MAKEFS](er: null | Error | undefined, entry: ReadEntry) {\n return super[MAKEFS](er, entry, () => {})\n }\n\n [CHECKFS](entry: ReadEntry) {\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode)\n if (er) {\n return this[ONERROR](er as Error, entry)\n }\n this[CHECKED_CWD] = true\n }\n\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode)\n if (mkParent) {\n return this[ONERROR](mkParent as Error, entry)\n }\n }\n }\n\n const [lstatEr, st] = callSync(() =>\n fs.lstatSync(String(entry.absolute)),\n )\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n return this[SKIP](entry)\n }\n\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const [er] =\n needChmod ?\n callSync(() => {\n fs.chmodSync(String(entry.absolute), Number(entry.mode))\n })\n : []\n return this[MAKEFS](er, entry)\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() =>\n fs.rmdirSync(String(entry.absolute)),\n )\n this[MAKEFS](er, entry)\n }\n\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] =\n entry.absolute === this.cwd ?\n []\n : callSync(() => unlinkFileSync(String(entry.absolute)))\n this[MAKEFS](er, entry)\n }\n\n [FILE](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n\n const oner = (er?: null | Error | undefined) => {\n let closeError\n try {\n fs.closeSync(fd)\n } catch (e) {\n closeError = e\n }\n if (er || closeError) {\n this[ONERROR]((er as Error) || closeError, entry)\n }\n done()\n }\n\n let fd: number\n try {\n fd = fs.openSync(\n String(entry.absolute),\n getWriteFlag(entry.size),\n mode,\n )\n /* c8 ignore start - This is only a problem if the file was successfully\n * statted, BUT failed to open. Testing this is annoying, and we\n * already have ample testint for other uses of oner() methods.\n */\n } catch (er) {\n return oner(er as Error)\n }\n /* c8 ignore stop */\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => this[ONERROR](er, entry))\n entry.pipe(tx)\n }\n\n tx.on('data', (chunk: Buffer) => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length)\n } catch (er) {\n oner(er as Error)\n }\n })\n\n tx.on('end', () => {\n let er = null\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n try {\n fs.futimesSync(fd, atime, mtime)\n } catch (futimeser) {\n try {\n fs.utimesSync(String(entry.absolute), atime, mtime)\n } catch (utimeser) {\n er = futimeser\n }\n }\n }\n\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n\n try {\n fs.fchownSync(fd, Number(uid), Number(gid))\n } catch (fchowner) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(uid),\n Number(gid),\n )\n } catch (chowner) {\n er = er || fchowner\n }\n }\n }\n\n oner(er as Error)\n })\n }\n\n [DIRECTORY](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n const er = this[MKDIR](String(entry.absolute), mode)\n if (er) {\n this[ONERROR](er as Error, entry)\n done()\n return\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n )\n /* c8 ignore next */\n } catch (er) {}\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n )\n } catch (er) {}\n }\n done()\n entry.resume()\n }\n\n [MKDIR](dir: string, mode: number) {\n try {\n return mkdirSync(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n })\n } catch (er) {\n return er\n }\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n const ls: `${typeof link}Sync` = `${link}Sync`\n try {\n fs[ls](linkpath, String(entry.absolute))\n done()\n entry.resume()\n } catch (er) {\n return this[ONERROR](er as Error, entry)\n }\n }\n}\n"]} \ No newline at end of file +{"version":3,"file":"unpack.js","sourceRoot":"","sources":["../../src/unpack.ts"],"names":[],"mappings":"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","sourcesContent":["// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nimport * as fsm from '@isaacs/fs-minipass'\nimport assert from 'node:assert'\nimport { randomBytes } from 'node:crypto'\nimport fs, { type Stats } from 'node:fs'\nimport path from 'node:path'\nimport { getWriteFlag } from './get-write-flag.js'\nimport { mkdir, MkdirError, mkdirSync } from './mkdir.js'\nimport { normalizeWindowsPath } from './normalize-windows-path.js'\nimport { Parser } from './parse.js'\nimport { stripAbsolutePath } from './strip-absolute-path.js'\nimport * as wc from './winchars.js'\n\nimport { TarOptions } from './options.js'\nimport { PathReservations } from './path-reservations.js'\nimport { ReadEntry } from './read-entry.js'\nimport { WarnData } from './warn-method.js'\nimport { SymlinkError } from './symlink-error.js'\nimport { umask } from './process-umask.js'\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst STRIPABSOLUTEPATH = Symbol('stripAbsolutePath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst platform =\n process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (\n path: string,\n cb: (er?: Error | null) => void,\n) => {\n if (!isWindows) {\n return fs.unlink(path, cb)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.rename(path, name, er => {\n if (er) {\n return cb(er)\n }\n fs.unlink(name, cb)\n })\n}\n/* c8 ignore stop */\n\n/* c8 ignore start */\nconst unlinkFileSync = (path: string) => {\n if (!isWindows) {\n return fs.unlinkSync(path)\n }\n\n const name = path + '.DELETE.' + randomBytes(16).toString('hex')\n fs.renameSync(path, name)\n fs.unlinkSync(name)\n}\n/* c8 ignore stop */\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (\n a: number | undefined,\n b: number | undefined,\n c: number | undefined,\n) =>\n a !== undefined && a === a >>> 0 ? a\n : b !== undefined && b === b >>> 0 ? b\n : c\n\nexport class Unpack extends Parser {\n [ENDED]: boolean = false;\n [CHECKED_CWD]: boolean = false;\n [PENDING]: number = 0\n\n reservations: PathReservations = new PathReservations()\n transform?: TarOptions['transform']\n writable: true = true\n readable: false = false\n uid?: number\n gid?: number\n setOwner: boolean\n preserveOwner: boolean\n processGid?: number\n processUid?: number\n maxDepth: number\n forceChown: boolean\n win32: boolean\n newer: boolean\n keep: boolean\n noMtime: boolean\n preservePaths: boolean\n unlink: boolean\n cwd: string\n strip: number\n processUmask: number\n umask: number\n dmode: number\n fmode: number\n chmod: boolean\n\n constructor(opt: TarOptions = {}) {\n opt.ondone = () => {\n this[ENDED] = true\n this[MAYBECLOSE]()\n }\n\n super(opt)\n\n this.transform = opt.transform\n\n this.chmod = !!opt.chmod\n\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (\n typeof opt.uid !== 'number' ||\n typeof opt.gid !== 'number'\n ) {\n throw new TypeError(\n 'cannot set owner without number uid and gid',\n )\n }\n if (opt.preserveOwner) {\n throw new TypeError(\n 'cannot preserve owner in archive and also set owner explicitly',\n )\n }\n this.uid = opt.uid\n this.gid = opt.gid\n this.setOwner = true\n } else {\n this.uid = undefined\n this.gid = undefined\n this.setOwner = false\n }\n\n // default true for root\n if (\n opt.preserveOwner === undefined &&\n typeof opt.uid !== 'number'\n ) {\n this.preserveOwner = !!(\n process.getuid && process.getuid() === 0\n )\n } else {\n this.preserveOwner = !!opt.preserveOwner\n }\n\n this.processUid =\n (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid()\n : undefined\n this.processGid =\n (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid()\n : undefined\n\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth =\n typeof opt.maxDepth === 'number' ?\n opt.maxDepth\n : DEFAULT_MAX_DEPTH\n\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true\n\n // turn > this[ONENTRY](entry))\n }\n\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn(code: string, msg: string | Error, data: WarnData = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false\n }\n return super.warn(code, msg, data)\n }\n\n [MAYBECLOSE]() {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish')\n this.emit('finish')\n this.emit('end')\n }\n }\n\n // return false if we need to skip this file\n // return true if the field was successfully sanitized\n [STRIPABSOLUTEPATH](\n entry: ReadEntry,\n field: 'path' | 'linkpath',\n ): boolean {\n const p = entry[field]\n const { type } = entry\n if (!p || this.preservePaths) return true\n\n const parts = p.split('/')\n\n if (\n parts.includes('..') ||\n /* c8 ignore next */\n (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))\n ) {\n // For linkpath, check if the resolved path escapes cwd rather than\n // just rejecting any path with '..' - relative symlinks like\n // '../sibling/file' are valid if they resolve within the cwd.\n // For paths, they just simply may not ever use .. at all.\n if (field === 'path' || type === 'Link') {\n this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, {\n entry,\n [field]: p,\n })\n // not ok!\n return false\n } else {\n // Resolve linkpath relative to the entry's directory.\n // `path.posix` is safe to use because we're operating on\n // tar paths, not a filesystem.\n const entryDir = path.posix.dirname(entry.path)\n const resolved = path.posix.normalize(\n path.posix.join(entryDir, p),\n )\n // If the resolved path escapes (starts with ..), reject it\n if (resolved.startsWith('../') || resolved === '..') {\n this.warn(\n 'TAR_ENTRY_ERROR',\n `${field} escapes extraction directory`,\n {\n entry,\n [field]: p,\n },\n )\n return false\n }\n }\n }\n\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p)\n if (root) {\n // ok, but triggers warning about stripping root\n entry[field] = String(stripped)\n this.warn(\n 'TAR_ENTRY_INFO',\n `stripping ${root} from absolute ${field}`,\n {\n entry,\n [field]: p,\n },\n )\n }\n return true\n }\n\n // no IO, just string checking for absolute indicators\n [CHECKPATH](entry: ReadEntry) {\n const p = normalizeWindowsPath(entry.path)\n const parts = p.split('/')\n\n if (this.strip) {\n if (parts.length < this.strip) {\n return false\n }\n if (entry.type === 'Link') {\n const linkparts = normalizeWindowsPath(\n String(entry.linkpath),\n ).split('/')\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/')\n } else {\n return false\n }\n }\n parts.splice(0, this.strip)\n entry.path = parts.join('/')\n }\n\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n })\n return false\n }\n\n if (\n !this[STRIPABSOLUTEPATH](entry, 'path') ||\n !this[STRIPABSOLUTEPATH](entry, 'linkpath')\n ) {\n return false\n }\n\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normalizeWindowsPath(path.resolve(entry.path))\n } else {\n entry.absolute = normalizeWindowsPath(\n path.resolve(this.cwd, entry.path),\n )\n }\n\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* c8 ignore start - defense in depth */\n if (\n !this.preservePaths &&\n typeof entry.absolute === 'string' &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd\n ) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normalizeWindowsPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n })\n return false\n }\n /* c8 ignore stop */\n\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (\n entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir'\n ) {\n return false\n }\n\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(String(entry.absolute))\n entry.absolute =\n aRoot + wc.encode(String(entry.absolute).slice(aRoot.length))\n const { root: pRoot } = path.win32.parse(entry.path)\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n }\n\n return true\n }\n\n [ONENTRY](entry: ReadEntry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume()\n }\n\n assert.equal(typeof entry.absolute, 'string')\n\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700\n }\n\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry)\n\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry)\n }\n }\n\n [ONERROR](er: Error, entry: ReadEntry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er)\n } else {\n this.warn('TAR_ENTRY_ERROR', er, { entry })\n this[UNPEND]()\n entry.resume()\n }\n }\n\n [MKDIR](\n dir: string,\n mode: number,\n cb: (er?: null | MkdirError, made?: string) => void,\n ) {\n mkdir(\n normalizeWindowsPath(dir),\n {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n },\n cb,\n )\n }\n\n [DOCHOWN](entry: ReadEntry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return (\n this.forceChown ||\n (this.preserveOwner &&\n ((typeof entry.uid === 'number' &&\n entry.uid !== this.processUid) ||\n (typeof entry.gid === 'number' &&\n entry.gid !== this.processGid))) ||\n (typeof this.uid === 'number' &&\n this.uid !== this.processUid) ||\n (typeof this.gid === 'number' && this.gid !== this.processGid)\n )\n }\n\n [UID](entry: ReadEntry) {\n return uint32(this.uid, entry.uid, this.processUid)\n }\n\n [GID](entry: ReadEntry) {\n return uint32(this.gid, entry.gid, this.processGid)\n }\n\n [FILE](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n const stream = new fsm.WriteStream(String(entry.absolute), {\n // slight lie, but it can be numeric flags\n flags: getWriteFlag(entry.size) as string,\n mode: mode,\n autoClose: false,\n })\n stream.on('error', (er: Error) => {\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true\n this[ONERROR](er, entry)\n fullyDone()\n })\n\n let actions = 1\n const done = (er?: null | Error) => {\n if (er) {\n /* c8 ignore start - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n /* c8 ignore stop */\n\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n if (--actions === 0) {\n if (stream.fd !== undefined) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n }\n fullyDone()\n })\n }\n }\n }\n\n stream.on('finish', () => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = String(entry.absolute)\n const fd = stream.fd\n\n if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n actions++\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n fs.futimes(fd, atime, mtime, er =>\n er ?\n fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done(),\n )\n }\n\n if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n actions++\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n if (typeof uid === 'number' && typeof gid === 'number') {\n fs.fchown(fd, uid, gid, er =>\n er ?\n fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done(),\n )\n }\n }\n\n done()\n })\n\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => {\n this[ONERROR](er, entry)\n fullyDone()\n })\n entry.pipe(tx)\n }\n tx.pipe(stream)\n }\n\n [DIRECTORY](entry: ReadEntry, fullyDone: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n this[MKDIR](String(entry.absolute), mode, er => {\n if (er) {\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n let actions = 1\n const done = () => {\n if (--actions === 0) {\n fullyDone()\n this[UNPEND]()\n entry.resume()\n }\n }\n\n if (entry.mtime && !this.noMtime) {\n actions++\n fs.utimes(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n done,\n )\n }\n\n if (this[DOCHOWN](entry)) {\n actions++\n fs.chown(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n done,\n )\n }\n\n done()\n })\n }\n\n [UNSUPPORTED](entry: ReadEntry) {\n entry.unsupported = true\n this.warn(\n 'TAR_ENTRY_UNSUPPORTED',\n `unsupported entry type: ${entry.type}`,\n { entry },\n )\n entry.resume()\n }\n\n [SYMLINK](entry: ReadEntry, done: () => void) {\n const parts = normalizeWindowsPath(\n path.relative(\n this.cwd,\n path.resolve(\n path.dirname(String(entry.absolute)),\n String(entry.linkpath),\n ),\n ),\n ).split('/')\n this[ENSURE_NO_SYMLINK](\n entry,\n this.cwd,\n parts,\n () =>\n this[LINK](entry, String(entry.linkpath), 'symlink', done),\n er => {\n this[ONERROR](er, entry)\n done()\n },\n )\n }\n\n [HARDLINK](entry: ReadEntry, done: () => void) {\n const linkpath = normalizeWindowsPath(\n path.resolve(this.cwd, String(entry.linkpath)),\n )\n const parts = normalizeWindowsPath(String(entry.linkpath)).split(\n '/',\n )\n this[ENSURE_NO_SYMLINK](\n entry,\n this.cwd,\n parts,\n () => this[LINK](entry, linkpath, 'link', done),\n er => {\n this[ONERROR](er, entry)\n done()\n },\n )\n }\n\n [ENSURE_NO_SYMLINK](\n entry: ReadEntry,\n cwd: string,\n parts: string[],\n done: () => void,\n onError: (er: SymlinkError) => void,\n ) {\n const p = parts.shift()\n if (this.preservePaths || p === undefined) return done()\n const t = path.resolve(cwd, p)\n fs.lstat(t, (er, st) => {\n if (er) return done()\n if (st?.isSymbolicLink()) {\n return onError(\n new SymlinkError(t, path.resolve(t, parts.join('/'))),\n )\n }\n this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError)\n })\n }\n\n [PEND]() {\n this[PENDING]++\n }\n\n [UNPEND]() {\n this[PENDING]--\n this[MAYBECLOSE]()\n }\n\n [SKIP](entry: ReadEntry) {\n this[UNPEND]()\n entry.resume()\n }\n\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE](entry: ReadEntry, st: Stats) {\n return (\n entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows\n )\n }\n\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS](entry: ReadEntry) {\n this[PEND]()\n const paths = [entry.path]\n if (entry.linkpath) {\n paths.push(entry.linkpath)\n }\n this.reservations.reserve(paths, done =>\n this[CHECKFS2](entry, done),\n )\n }\n\n [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) {\n const done = (er?: Error) => {\n fullyDone(er)\n }\n\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n this[CHECKED_CWD] = true\n start()\n })\n }\n\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n afterMakeParent()\n })\n }\n }\n afterMakeParent()\n }\n\n const afterMakeParent = () => {\n fs.lstat(String(entry.absolute), (lstatEr, st) => {\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n this[SKIP](entry)\n done()\n return\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const afterChmod = (er?: Error | null | undefined) =>\n this[MAKEFS](er ?? null, entry, done)\n if (!needChmod) {\n return afterChmod()\n }\n return fs.chmod(\n String(entry.absolute),\n Number(entry.mode),\n afterChmod,\n )\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(\n String(entry.absolute),\n (er?: null | Error) =>\n this[MAKEFS](er ?? null, entry, done),\n )\n }\n }\n\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done)\n }\n\n unlinkFile(String(entry.absolute), er =>\n this[MAKEFS](er ?? null, entry, done),\n )\n })\n }\n\n if (this[CHECKED_CWD]) {\n start()\n } else {\n checkCwd()\n }\n }\n\n [MAKEFS](\n er: null | undefined | Error,\n entry: ReadEntry,\n done: () => void,\n ) {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done)\n\n case 'Link':\n return this[HARDLINK](entry, done)\n\n case 'SymbolicLink':\n return this[SYMLINK](entry, done)\n\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done)\n }\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n fs[link](linkpath, String(entry.absolute), er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n entry.resume()\n }\n done()\n })\n }\n}\n\nconst callSync = (\n fn: () => T,\n): [null, T] | [NodeJS.ErrnoException, null] => {\n try {\n return [null, fn()]\n } catch (er) {\n return [er as NodeJS.ErrnoException, null]\n }\n}\n\nexport class UnpackSync extends Unpack {\n sync: true = true;\n\n [MAKEFS](er: null | Error | undefined, entry: ReadEntry) {\n return super[MAKEFS](er, entry, () => {})\n }\n\n [CHECKFS](entry: ReadEntry) {\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode)\n if (er) {\n return this[ONERROR](er as Error, entry)\n }\n this[CHECKED_CWD] = true\n }\n\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(\n path.dirname(String(entry.absolute)),\n )\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode)\n if (mkParent) {\n return this[ONERROR](mkParent as Error, entry)\n }\n }\n }\n\n const [lstatEr, st] = callSync(() =>\n fs.lstatSync(String(entry.absolute)),\n )\n if (\n st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))\n ) {\n return this[SKIP](entry)\n }\n\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod =\n this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const [er] =\n needChmod ?\n callSync(() => {\n fs.chmodSync(String(entry.absolute), Number(entry.mode))\n })\n : []\n return this[MAKEFS](er, entry)\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() =>\n fs.rmdirSync(String(entry.absolute)),\n )\n this[MAKEFS](er, entry)\n }\n\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] =\n entry.absolute === this.cwd ?\n []\n : callSync(() => unlinkFileSync(String(entry.absolute)))\n this[MAKEFS](er, entry)\n }\n\n [FILE](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode\n\n const oner = (er?: null | Error | undefined) => {\n let closeError\n try {\n fs.closeSync(fd)\n } catch (e) {\n closeError = e\n }\n if (er || closeError) {\n this[ONERROR]((er as Error) || closeError, entry)\n }\n done()\n }\n\n let fd: number\n try {\n fd = fs.openSync(\n String(entry.absolute),\n getWriteFlag(entry.size),\n mode,\n )\n /* c8 ignore start - This is only a problem if the file was successfully\n * statted, BUT failed to open. Testing this is annoying, and we\n * already have ample testint for other uses of oner() methods.\n */\n } catch (er) {\n return oner(er as Error)\n }\n /* c8 ignore stop */\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', (er: Error) => this[ONERROR](er, entry))\n entry.pipe(tx)\n }\n\n tx.on('data', (chunk: Buffer) => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length)\n } catch (er) {\n oner(er as Error)\n }\n })\n\n tx.on('end', () => {\n let er = null\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n try {\n fs.futimesSync(fd, atime, mtime)\n } catch (futimeser) {\n try {\n fs.utimesSync(String(entry.absolute), atime, mtime)\n } catch (utimeser) {\n er = futimeser\n }\n }\n }\n\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n\n try {\n fs.fchownSync(fd, Number(uid), Number(gid))\n } catch (fchowner) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(uid),\n Number(gid),\n )\n } catch (chowner) {\n er = er || fchowner\n }\n }\n }\n\n oner(er as Error)\n })\n }\n\n [DIRECTORY](entry: ReadEntry, done: () => void) {\n const mode =\n typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode\n const er = this[MKDIR](String(entry.absolute), mode)\n if (er) {\n this[ONERROR](er as Error, entry)\n done()\n return\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(\n String(entry.absolute),\n entry.atime || new Date(),\n entry.mtime,\n )\n /* c8 ignore next */\n } catch (er) {}\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(\n String(entry.absolute),\n Number(this[UID](entry)),\n Number(this[GID](entry)),\n )\n } catch (er) {}\n }\n done()\n entry.resume()\n }\n\n [MKDIR](dir: string, mode: number) {\n try {\n return mkdirSync(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n })\n } catch (er) {\n return er\n }\n }\n\n [ENSURE_NO_SYMLINK](\n _entry: ReadEntry,\n cwd: string,\n parts: string[],\n done: () => void,\n onError: (er: SymlinkError) => void,\n ) {\n if (this.preservePaths || !parts.length) return done()\n let t = cwd\n for (const p of parts) {\n t = path.resolve(t, p)\n const [er, st] = callSync(() => fs.lstatSync(t))\n if (er) return done()\n if (st.isSymbolicLink()) {\n return onError(\n new SymlinkError(t, path.resolve(cwd, parts.join('/'))),\n )\n }\n }\n done()\n }\n\n [LINK](\n entry: ReadEntry,\n linkpath: string,\n link: 'link' | 'symlink',\n done: () => void,\n ) {\n const linkSync: `${typeof link}Sync` = `${link}Sync`\n try {\n fs[linkSync](linkpath, String(entry.absolute))\n done()\n entry.resume()\n } catch (er) {\n return this[ONERROR](er as Error, entry)\n }\n }\n}\n"]} \ No newline at end of file diff --git a/frontend-admin/node_modules/tar/package.json b/frontend-admin/node_modules/tar/package.json index 39776415..7565cf81 100644 --- a/frontend-admin/node_modules/tar/package.json +++ b/frontend-admin/node_modules/tar/package.json @@ -2,7 +2,7 @@ "author": "Isaac Z. Schlueter", "name": "tar", "description": "tar for node", - "version": "7.5.7", + "version": "7.5.9", "repository": { "type": "git", "url": "https://github.com/isaacs/node-tar.git" @@ -13,7 +13,7 @@ "test": "tap", "pretest": "npm run prepare", "presnap": "npm run prepare", - "prepare": "tshy", + "prepare": "tshy && bash scripts/build.sh", "preversion": "npm test", "postversion": "npm publish", "prepublishOnly": "git push origin --follow-tags", @@ -31,6 +31,7 @@ "@types/node": "^25.0.9", "chmodr": "^2.0.2", "end-of-stream": "^1.4.3", + "esbuild": "^0.27.3", "events-to-array": "^2.0.3", "mutate-fs": "^2.1.1", "nock": "^13.5.4", @@ -50,7 +51,17 @@ "tshy": { "exports": { "./package.json": "./package.json", - ".": "./src/index.ts", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.min.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.min.js" + } + }, + "./raw": "./src/index.ts", "./c": "./src/create.ts", "./create": "./src/create.ts", "./replace": "./src/create.ts", @@ -74,6 +85,16 @@ "exports": { "./package.json": "./package.json", ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.min.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.min.js" + } + }, + "./raw": { "import": { "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.js" @@ -265,7 +286,7 @@ } }, "type": "module", - "main": "./dist/commonjs/index.js", + "main": "./dist/commonjs/index.min.js", "types": "./dist/commonjs/index.d.ts", - "module": "./dist/esm/index.js" + "module": "./dist/esm/index.min.js" } diff --git a/frontend-admin/package-lock.json b/frontend-admin/package-lock.json index 2fca6368..50586946 100644 --- a/frontend-admin/package-lock.json +++ b/frontend-admin/package-lock.json @@ -14,7 +14,7 @@ "@react-navigation/native": "^7.1.28", "@react-navigation/native-stack": "^7.11.0", "axios": "^1.13.4", - "expo": "~54.0.32", + "expo": "~54.0.33", "expo-font": "~14.0.11", "expo-image-picker": "~17.0.10", "expo-location": "~19.0.8", @@ -29,7 +29,8 @@ "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-web": "^0.21.0", - "react-native-webview": "13.15.0" + "react-native-webview": "13.15.0", + "react-native-worklets": "0.5.1" }, "devDependencies": { "@expo/ngrok": "^4.1.3", @@ -1278,7 +1279,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1941,9 +1941,9 @@ } }, "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": { "semver": "bin/semver.js" }, @@ -4022,12 +4022,12 @@ "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==" }, "node_modules/expo": { - "version": "54.0.32", - "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.32.tgz", - "integrity": "sha512-yL9eTxiQ/QKKggVDAWO5CLjUl6IS0lPYgEvC3QM4q4fxd6rs7ks3DnbXSGVU3KNFoY/7cRNYihvd0LKYP+MCXA==", + "version": "54.0.33", + "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.33.tgz", + "integrity": "sha512-3yOEfAKqo+gqHcV8vKcnq0uA5zxlohnhA3fu4G43likN8ct5ZZ3LjAh9wDdKteEkoad3tFPvwxmXW711S5OHUw==", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.22", + "@expo/cli": "54.0.23", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", @@ -4205,9 +4205,9 @@ } }, "node_modules/expo/node_modules/@expo/cli": { - "version": "54.0.22", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.22.tgz", - "integrity": "sha512-BTH2FCczhJLfj1cpfcKrzhKnvRLTOztgW4bVloKDqH+G3ZSohWLRFNAIz56XtdjPxBbi2/qWhGBAkl7kBon/Jw==", + "version": "54.0.23", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.23.tgz", + "integrity": "sha512-km0h72SFfQCmVycH/JtPFTVy69w6Lx1cHNDmfLfQqgKFYeeHTjx7LVDP4POHCtNxFP2UeRazrygJhlh4zz498g==", "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@expo/code-signing-certificates": "^0.0.6", @@ -4316,9 +4316,9 @@ } }, "node_modules/expo/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": { "semver": "bin/semver.js" }, @@ -6248,9 +6248,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": { "semver": "bin/semver.js" }, @@ -7040,120 +7040,32 @@ } }, "node_modules/react-native-worklets": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.7.2.tgz", - "integrity": "sha512-DuLu1kMV/Uyl9pQHp3hehAlThoLw7Yk2FwRTpzASOmI+cd4845FWn3m2bk9MnjUw8FBRIyhwLqYm2AJaXDXsog==", - "peer": true, + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", + "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", "dependencies": { - "@babel/plugin-transform-arrow-functions": "7.27.1", - "@babel/plugin-transform-class-properties": "7.27.1", - "@babel/plugin-transform-classes": "7.28.4", - "@babel/plugin-transform-nullish-coalescing-operator": "7.27.1", - "@babel/plugin-transform-optional-chaining": "7.27.1", - "@babel/plugin-transform-shorthand-properties": "7.27.1", - "@babel/plugin-transform-template-literals": "7.27.1", - "@babel/plugin-transform-unicode-regex": "7.27.1", - "@babel/preset-typescript": "7.27.1", - "convert-source-map": "2.0.0", - "semver": "7.7.3" + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-class-properties": "^7.0.0-0", + "@babel/plugin-transform-classes": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/plugin-transform-unicode-regex": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "semver": "7.7.2" }, "peerDependencies": { - "@babel/core": "*", + "@babel/core": "^7.0.0-0", "react": "*", "react-native": "*" } }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/react-native-worklets/node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/react-native-worklets/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "peer": true, + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "bin": { "semver": "bin/semver.js" }, @@ -7920,9 +7832,9 @@ } }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", diff --git a/frontend-admin/package.json b/frontend-admin/package.json index 7fe56d55..f833be62 100644 --- a/frontend-admin/package.json +++ b/frontend-admin/package.json @@ -15,7 +15,7 @@ "@react-navigation/native": "^7.1.28", "@react-navigation/native-stack": "^7.11.0", "axios": "^1.13.4", - "expo": "~54.0.32", + "expo": "~54.0.33", "expo-font": "~14.0.11", "expo-image-picker": "~17.0.10", "expo-location": "~19.0.8", @@ -30,7 +30,8 @@ "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-web": "^0.21.0", - "react-native-webview": "13.15.0" + "react-native-webview": "13.15.0", + "react-native-worklets": "0.5.1" }, "devDependencies": { "@expo/ngrok": "^4.1.3", diff --git a/mobile/src/api/api.ts b/mobile/src/api/api.ts index 1a03aa54..6a296cb2 100644 --- a/mobile/src/api/api.ts +++ b/mobile/src/api/api.ts @@ -11,7 +11,7 @@ import type { import { getToken } from "../auth/tokenStorage"; import { extractUsernameFromToken } from "../auth/jwtUtils"; -const V1 = "http://172.20.167.237:8080/api/v1"; +const V1 = "https://uber-stup.club/api/v1"; // ============================================ // AUTH HELPERS diff --git a/mobile/src/api/client.ts b/mobile/src/api/client.ts index 4c1b34a9..d75a799d 100644 --- a/mobile/src/api/client.ts +++ b/mobile/src/api/client.ts @@ -2,7 +2,7 @@ import axios from "axios"; import { getToken, getAdminToken } from "../auth/tokenStorage"; // Change this to your server IP/domain -export const API_BASE_URL = "http://172.20.167.237:8080"; +export const API_BASE_URL = "https://uber-stup.club"; const apiClient = axios.create({ baseURL: API_BASE_URL, diff --git a/mobile/src/services/pushNotifications.ts b/mobile/src/services/pushNotifications.ts index e5b59952..873ef0fa 100644 --- a/mobile/src/services/pushNotifications.ts +++ b/mobile/src/services/pushNotifications.ts @@ -4,7 +4,7 @@ import Constants from "expo-constants"; import { Platform } from "react-native"; import apiClient from "../api/client"; -const V1 = "http://172.20.167.237:8080/api/v1"; +const V1 = "https://uber-stup.club/api/v1"; // Configuration du comportement des notifications en foreground Notifications.setNotificationHandler({ @@ -64,9 +64,7 @@ export async function registerForPushNotificationsAsync(): Promise< Constants.easConfig?.projectId; if (!projectId) { - console.log( - "⚠️ projectId non trouvé - push notifications désactivées", - ); + console.log("⚠️ projectId non trouvé - push notifications désactivées"); return null; }