diff --git a/apps/common-app/src/examples/RuntimeTests/tests/plugin/fileWorkletization.ts b/apps/common-app/src/examples/RuntimeTests/tests/plugin/fileWorkletization.ts index a65545a8f98..03c3f00ce0a 100644 --- a/apps/common-app/src/examples/RuntimeTests/tests/plugin/fileWorkletization.ts +++ b/apps/common-app/src/examples/RuntimeTests/tests/plugin/fileWorkletization.ts @@ -23,12 +23,17 @@ export const implicitContextObject = { }, }; -export class ImplicitWorkletClass { - getSix() { +interface IWorkletClass { + getSix(): number; + getSeven(): number; +} + +export class ImplicitWorkletClass implements IWorkletClass { + getSix(): number { return 6; } - getSeven() { + getSeven(): number { return this.getSix() + 1; } } diff --git a/apps/common-app/src/examples/RuntimeTests/tests/plugin/recursion.test.tsx b/apps/common-app/src/examples/RuntimeTests/tests/plugin/recursion.test.tsx index d9ec95bbc8f..9ab0a39408d 100644 --- a/apps/common-app/src/examples/RuntimeTests/tests/plugin/recursion.test.tsx +++ b/apps/common-app/src/examples/RuntimeTests/tests/plugin/recursion.test.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from 'react'; import { View } from 'react-native'; -import { useSharedValue, runOnUI, runOnJS } from 'react-native-reanimated'; +import { useSharedValue, runOnUI } from 'react-native-reanimated'; import { render, wait, describe, getRegisteredValue, registerValue, test, expect } from '../../ReJest/RuntimeTestsApi'; const SHARED_VALUE_REF = 'SHARED_VALUE_REF'; @@ -85,15 +85,13 @@ describe('Test recursion in worklets', () => { const output = useSharedValue(null); registerValue(SHARED_VALUE_REF, output); function recursiveWorklet(a: number) { - if (a === 2) { + if (a === 1) { output.value = a; - } else if (a === 1) { - try { - // TODO: Such case isn't supported at the moment - - // a function can't be a Worklet and a Remote function at the same time. - // Consider supporting it in the future. - runOnJS(recursiveWorklet)(a + 1); - } catch {} + } else if (a === 2) { + // TODO: Such case isn't supported at the moment - + // a function can't be a Worklet and a Remote function at the same time. + // Consider supporting it in the future. + // runOnJS(recursiveWorklet)(a + 1); } else { recursiveWorklet(a + 1); } @@ -108,6 +106,6 @@ describe('Test recursion in worklets', () => { await render(); await wait(100); const sharedValue = await getRegisteredValue(SHARED_VALUE_REF); - expect(sharedValue.onJS).toBe(null); + expect(sharedValue.onJS).toBe(1); }); }); diff --git a/apps/common-app/src/examples/RuntimeTests/tests/plugin/workletClasses.test.tsx b/apps/common-app/src/examples/RuntimeTests/tests/plugin/workletClasses.test.tsx index bd4d0244ecb..838e8e1f9db 100644 --- a/apps/common-app/src/examples/RuntimeTests/tests/plugin/workletClasses.test.tsx +++ b/apps/common-app/src/examples/RuntimeTests/tests/plugin/workletClasses.test.tsx @@ -21,6 +21,28 @@ class WorkletClass { } } +interface ITypeScriptClass { + getOne(): number; + getTwo(): number; + getIncremented(): number; +} + +class TypeScriptClass implements ITypeScriptClass { + __workletClass: boolean = true; + value: number = 0; + getOne(): number { + return 1; + } + + getTwo(): number { + return this.getOne() + 1; + } + + getIncremented(): number { + return ++this.value; + } +} + describe('Test worklet classes', () => { test('class works on React runtime', async () => { const ExampleComponent = () => { @@ -134,5 +156,26 @@ describe('Test worklet classes', () => { expect(sharedValue.onUI).toBe(true); }); + test('TypeScript classes work on Worklet runtime', async () => { + const ExampleComponent = () => { + const output = useSharedValue(null); + registerValue(SHARED_VALUE_REF, output); + + useEffect(() => { + runOnUI(() => { + const clazz = new TypeScriptClass(); + output.value = clazz.getOne(); + })(); + }); + + return ; + }; + await render(); + await wait(100); + const sharedValue = await getRegisteredValue(SHARED_VALUE_REF); + expect(sharedValue.onUI).toBe(1); + }); + // TODO: Add a test that throws when class is sent from React to Worklet runtime. + // TODO: Add a test that throws when trying to use Worklet Class with inheritance. }); diff --git a/packages/docs-reanimated/docs/reanimated-babel-plugin/about.md b/packages/docs-reanimated/docs/reanimated-babel-plugin/about.md index cb1b9a5b1f0..7fbc63e36b6 100644 --- a/packages/docs-reanimated/docs/reanimated-babel-plugin/about.md +++ b/packages/docs-reanimated/docs/reanimated-babel-plugin/about.md @@ -146,6 +146,7 @@ runOnUI(() => new Clazz().foo())(); // Logs 'Hello from WorkletClass' **Pitfalls:** +- Worklet Classes don't support inheritance. - Worklet Classes don't support static methods and properties. - Class instances cannot be shared between JS and UI threads. diff --git a/packages/react-native-reanimated/plugin/index.js b/packages/react-native-reanimated/plugin/index.js index 7e34bbbb8f8..9ad3868d8e8 100644 --- a/packages/react-native-reanimated/plugin/index.js +++ b/packages/react-native-reanimated/plugin/index.js @@ -1,3 +1,3 @@ -"use strict";var Qe=Object.create;var be=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var nt=Object.getPrototypeOf,rt=Object.prototype.hasOwnProperty;var p=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var it=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of tt(t))!rt.call(e,i)&&i!==n&&be(e,i,{get:()=>t[i],enumerable:!(r=et(t,i))||r.enumerable});return e};var R=(e,t,n)=>(n=e!=null?Qe(nt(e)):{},it(t||!e||!e.__esModule?be(n,"default",{value:e,enumerable:!0}):n,e));var S=p(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.workletClassFactorySuffix=m.isWorkletizableObjectNode=m.isWorkletizableObjectPath=m.isWorkletizableFunctionNode=m.isWorkletizableFunctionPath=m.WorkletizableObject=m.WorkletizableFunction=void 0;var U=require("@babel/types");m.WorkletizableFunction="FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod";m.WorkletizableObject="ObjectExpression";function ot(e){return e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression()||e.isObjectMethod()}m.isWorkletizableFunctionPath=ot;function st(e){return(0,U.isFunctionDeclaration)(e)||(0,U.isFunctionExpression)(e)||(0,U.isArrowFunctionExpression)(e)||(0,U.isObjectMethod)(e)}m.isWorkletizableFunctionNode=st;function at(e){return e.isObjectExpression()}m.isWorkletizableObjectPath=at;function lt(e){return(0,U.isObjectExpression)(e)}m.isWorkletizableObjectNode=lt;m.workletClassFactorySuffix="__classFactory"});var M=p(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.replaceWithFactoryCall=A.isRelease=void 0;var B=require("@babel/types");function ct(){var e,t;let n=/(prod|release|stag[ei])/i;return!!(!((e=process.env.BABEL_ENV)===null||e===void 0)&&e.match(n)||!((t=process.env.NODE_ENV)===null||t===void 0)&&t.match(n))}A.isRelease=ct;function ut(e,t,n){if(!t||!dt(e))e.replaceWith(n);else{let r=(0,B.variableDeclaration)("const",[(0,B.variableDeclarator)((0,B.identifier)(t),n)]);e.replaceWith(r)}}A.replaceWithFactoryCall=ut;function dt(e){return(0,B.isScopable)(e.parent)||(0,B.isExportNamedDeclaration)(e.parent)}});var oe=p(k=>{"use strict";Object.defineProperty(k,"__esModule",{value:!0});k.addCustomGlobals=k.initializeGlobals=k.globals=k.defaultGlobals=k.initializeState=void 0;var ft=["globalThis","Infinity","NaN","undefined","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape","Object","Function","Boolean","Symbol","Error","AggregateError","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","InternalError","Number","BigInt","Math","Date","String","RegExp","Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","BigInt64Array","BigUint64Array","Float32Array","Float64Array","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Atomics","JSON","WeakRef","FinalizationRegistry","Iterator","AsyncIterator","Promise","GeneratorFunction","AsyncGeneratorFunction","Generator","AsyncGenerator","AsyncFunction","Reflect","Proxy","Intl","null","this","global","window","globalThis","console","performance","queueMicrotask","requestAnimationFrame","setImmediate","arguments","HermesInternal","_WORKLET","ReanimatedError","__reanimatedLoggerConfig"],pt=["_IS_FABRIC","_log","_toString","_scheduleHostFunctionOnJS","_scheduleRemoteFunctionOnJS","_scheduleOnRuntime","_makeShareableClone","_updatePropsPaper","_updatePropsFabric","_removeFromPropsRegistry","_measurePaper","_measureFabric","_scrollToPaper","_dispatchCommandPaper","_dispatchCommandFabric","_setGestureState","_notifyAboutProgress","_notifyAboutEnd","_runOnUIQueue","_getAnimationTimestamp"];function bt(e){e.workletNumber=1,me(),ye(e)}k.initializeState=bt;k.defaultGlobals=new Set(ft.concat(pt));function me(){k.globals=new Set(k.defaultGlobals)}k.initializeGlobals=me;function ye(e){e.opts&&Array.isArray(e.opts.globals)&&e.opts.globals.forEach(t=>{k.globals.add(t)})}k.addCustomGlobals=ye});var ge=p(v=>{"use strict";var mt=v&&v.__createBinding||(Object.create?function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]}),yt=v&&v.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),ke=v&&v.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)n!=="default"&&Object.prototype.hasOwnProperty.call(e,n)&&mt(t,e,n);return yt(t,e),t},kt=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.buildWorkletString=void 0;var se=require("@babel/core"),gt=kt(require("@babel/generator")),c=require("@babel/types"),G=require("assert"),_t=ke(require("convert-source-map")),Ot=ke(require("fs")),vt=S(),ht=M(),Et="mock source map";function St(e,t,n,r,i){It(e,r);let s=e.program.body.find(_=>(0,c.isFunctionDeclaration)(_))||e.program.body.find(_=>(0,c.isExpressionStatement)(_))||void 0;(0,G.strict)(s,"[Reanimated] `draftExpression` is undefined.");let l=(0,c.isFunctionDeclaration)(s)?s:s.expression;(0,G.strict)("params"in l,"'params' property is undefined in 'expression'"),(0,G.strict)((0,c.isBlockStatement)(l.body),"[Reanimated] `expression.body` is not a `BlockStatement`");let u=new Set;(0,se.traverse)(e,{NewExpression(_){if(!(0,c.isIdentifier)(_.node.callee))return;let x=_.node.callee.name;if(!n.some(H=>H.name===x)||u.has(x))return;let D=n.findIndex(H=>H.name===x);n.splice(D,1);let ne=x+vt.workletClassFactorySuffix;n.push((0,c.identifier)(ne)),(0,c.assertBlockStatement)(l.body),l.body.body.unshift((0,c.variableDeclaration)("const",[(0,c.variableDeclarator)((0,c.identifier)(x),(0,c.callExpression)((0,c.identifier)(ne),[]))])),u.add(x)}});let f=(0,c.functionExpression)((0,c.identifier)(r),l.params,l.body,l.generator,l.async),g=(0,gt.default)(f).code;(0,G.strict)(i,"[Reanimated] `inputMap` is undefined.");let O=!((0,ht.isRelease)()||t.opts.disableSourceMaps);if(O){i.sourcesContent=[];for(let _ of i.sources)i.sourcesContent.push(Ot.readFileSync(_).toString("utf-8"))}let j=(0,se.transformSync)(g,{plugins:[Ct(n)],compact:!0,sourceMaps:O,inputSourceMap:i,ast:!1,babelrc:!1,configFile:!1,comments:!1});(0,G.strict)(j,"[Reanimated] `transformed` is null.");let w;return O&&(Wt()?w=Et:(w=_t.fromObject(j.map).toObject(),delete w.sourcesContent)),[j.code,JSON.stringify(w)]}v.buildWorkletString=St;function It(e,t){(0,se.traverse)(e,{FunctionExpression(n){if(!n.node.id){n.stop();return}let r=n.node.id.name;n.scope.rename(r,t)}})}function Wt(){return process.env.REANIMATED_JEST_SHOULD_MOCK_SOURCE_MAP==="1"}function xt(e,t,n){t.length===0||!(0,c.isProgram)(e.parent)||(0,c.isExpression)(e.node.body)||e.node.body.body.unshift(n)}function Ft(e){var t;(0,c.isProgram)(e.parent)&&!(0,c.isArrowFunctionExpression)(e.node)&&!(0,c.isObjectMethod)(e.node)&&e.node.id&&e.scope.parent&&((t=e.scope.parent.bindings[e.node.id.name])===null||t===void 0?void 0:t.references)>0&&e.node.body.body.unshift((0,c.variableDeclaration)("const",[(0,c.variableDeclarator)((0,c.identifier)(e.node.id.name),(0,c.memberExpression)((0,c.thisExpression)(),(0,c.identifier)("_recur")))]))}function Ct(e){let t=(0,c.variableDeclaration)("const",[(0,c.variableDeclarator)((0,c.objectPattern)(e.map(n=>(0,c.objectProperty)((0,c.identifier)(n.name),(0,c.identifier)(n.name),!1,!0))),(0,c.memberExpression)((0,c.thisExpression)(),(0,c.identifier)("__closure")))]);return{visitor:{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod":n=>{xt(n,e,t),Ft(n)}}}}});var he=p(P=>{"use strict";var wt=P&&P.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(P,"__esModule",{value:!0});P.makeWorkletFactory=void 0;var Oe=require("@babel/core"),jt=wt(require("@babel/generator")),o=require("@babel/types"),F=require("assert"),ve=require("path"),Dt=oe(),_e=S(),ae=M(),Rt=ge(),At=require("../package.json").version,Mt="x.y.z",Pt=[require.resolve("@babel/preset-typescript")],qt=[require.resolve("@babel/plugin-transform-shorthand-properties"),require.resolve("@babel/plugin-transform-arrow-functions"),require.resolve("@babel/plugin-transform-optional-chaining"),require.resolve("@babel/plugin-transform-nullish-coalescing-operator"),[require.resolve("@babel/plugin-transform-template-literals"),{loose:!0}]];function Lt(e,t){zt(e),(0,F.strict)(t.file.opts.filename,"[Reanimated] `state.file.opts.filename` is undefined.");let n=(0,jt.default)(e.node,{sourceMaps:!0,sourceFileName:t.file.opts.filename});n.code="("+(e.isObjectMethod()?"function ":"")+n.code+` -)`;let r=(0,Oe.transformSync)(n.code,{filename:t.file.opts.filename,presets:Pt,plugins:qt,ast:!0,babelrc:!1,configFile:!1,inputSourceMap:n.map});(0,F.strict)(r,"[Reanimated] `transformed` is undefined."),(0,F.strict)(r.ast,"[Reanimated] `transformed.ast` is undefined.");let i=Bt(r.ast,e),s=(0,o.cloneNode)(e.node),l=(0,o.isBlockStatement)(s.body)?(0,o.functionExpression)(null,s.params,s.body,s.generator,s.async):s,{workletName:u,reactName:f}=Ut(e,t),[g,O]=(0,Rt.buildWorkletString)(r.ast,t,i,u,r.map);(0,F.strict)(g,"[Reanimated] `funString` is undefined.");let j=Tt(g),w=1;i.length>0&&(w-=i.length+2);let _=e.parentPath.isProgram()?e:e.findParent(y=>{var re,ie;return(ie=(re=y.parentPath)===null||re===void 0?void 0:re.isProgram())!==null&&ie!==void 0?ie:!1});(0,F.strict)(_,"[Reanimated] `pathForStringDefinitions` is null."),(0,F.strict)(_.parentPath,"[Reanimated] `pathForStringDefinitions.parentPath` is null.");let x=_.parentPath.scope.generateUidIdentifier(`worklet_${j}_init_data`),D=(0,o.objectExpression)([(0,o.objectProperty)((0,o.identifier)("code"),(0,o.stringLiteral)(g))]);if(!(0,ae.isRelease)()){let y=t.file.opts.filename;t.opts.relativeSourceLocation&&(y=(0,ve.relative)(t.cwd,y),O=O==null?void 0:O.replace(t.file.opts.filename,y)),D.properties.push((0,o.objectProperty)((0,o.identifier)("location"),(0,o.stringLiteral)(y)))}O&&D.properties.push((0,o.objectProperty)((0,o.identifier)("sourceMap"),(0,o.stringLiteral)(O))),!(0,ae.isRelease)()&&D.properties.push((0,o.objectProperty)((0,o.identifier)("version"),(0,o.stringLiteral)(Nt()?Mt:At)));let pe=!t.opts.omitNativeOnlyData;pe&&_.insertBefore((0,o.variableDeclaration)("const",[(0,o.variableDeclarator)(x,D)])),(0,F.strict)(!(0,o.isFunctionDeclaration)(l),"[Reanimated] `funExpression` is a `FunctionDeclaration`."),(0,F.strict)(!(0,o.isObjectMethod)(l),"[Reanimated] `funExpression` is an `ObjectMethod`.");let T=[(0,o.variableDeclaration)("const",[(0,o.variableDeclarator)((0,o.identifier)(f),l)]),(0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(f),(0,o.identifier)("__closure"),!1),(0,o.objectExpression)(i.map(y=>y.name.endsWith(_e.workletClassFactorySuffix)?(0,o.objectProperty)((0,o.identifier)(y.name),(0,o.memberExpression)((0,o.identifier)(y.name.slice(0,y.name.length-_e.workletClassFactorySuffix.length)),(0,o.identifier)(y.name))):(0,o.objectProperty)((0,o.identifier)(y.name),y,!1,!0))))),(0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(f),(0,o.identifier)("__workletHash"),!1),(0,o.numericLiteral)(j)))];return pe&&T.push((0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(f),(0,o.identifier)("__initData"),!1),x))),(0,ae.isRelease)()||(T.unshift((0,o.variableDeclaration)("const",[(0,o.variableDeclarator)((0,o.identifier)("_e"),(0,o.arrayExpression)([(0,o.newExpression)((0,o.memberExpression)((0,o.identifier)("global"),(0,o.identifier)("Error")),[]),(0,o.numericLiteral)(w),(0,o.numericLiteral)(-27)]))])),T.push((0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(f),(0,o.identifier)("__stackDetails"),!1),(0,o.identifier)("_e"))))),T.push((0,o.returnStatement)((0,o.identifier)(f))),(0,o.functionExpression)(void 0,[],(0,o.blockStatement)(T))}P.makeWorkletFactory=Lt;function zt(e){e.traverse({DirectiveLiteral(t){t.node.value==="worklet"&&t.getFunctionParent()===e&&t.parentPath.remove()}})}function Nt(){return process.env.REANIMATED_JEST_SHOULD_MOCK_VERSION==="1"}function Tt(e){let t=e.length,n=5381,r=52711;for(;t--;){let i=e.charCodeAt(t);n=n*33^i,r=r*33^i}return(n>>>0)*4096+(r>>>0)}function Ut(e,t){let n="unknownFile";if(t.file.opts.filename){let l=t.file.opts.filename;n=(0,ve.basename)(l);let u=l.split("/"),f=u.indexOf("node_modules");f!==-1&&(n=`${u[f+1]}_${n}`)}let r=`${n}${t.workletNumber++}`,i="";(0,o.isObjectMethod)(e.node)&&(0,o.isIdentifier)(e.node.key)?i=e.node.key.name:((0,o.isFunctionDeclaration)(e.node)||(0,o.isFunctionExpression)(e.node))&&(0,o.isIdentifier)(e.node.id)&&(i=e.node.id.name);let s=i?(0,o.toIdentifier)(`${i}_${r}`):(0,o.toIdentifier)(r);return i=i||(0,o.toIdentifier)(r),{workletName:s,reactName:i}}function Bt(e,t){let n=new Map,r=new Map;return(0,Oe.traverse)(e,{Identifier(i){if(!i.isReferencedIdentifier())return;let s=i.node.name;if(Dt.globals.has(s)||"id"in t.node&&t.node.id&&t.node.id.name===s)return;let l=i.parent;if((0,o.isMemberExpression)(l)&&l.property===i.node&&!l.computed||(0,o.isObjectProperty)(l)&&(0,o.isObjectExpression)(i.parentPath.parent)&&i.node!==l.value)return;let u=i.scope;for(;u!=null;){if(u.bindings[s]!=null)return;u=u.parent}n.set(s,i.node),r.set(s,!1)}}),t.traverse({Identifier(i){if(!i.isReferencedIdentifier())return;let s=n.get(i.node.name);!s||r.get(i.node.name)||(s.loc=i.node.loc,r.set(i.node.name,!0))}}),Array.from(n.values())}});var Ee=p(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.makeWorkletFactoryCall=void 0;var Gt=require("@babel/types"),Ht=he();function Zt(e,t){let n=(0,Ht.makeWorkletFactory)(e,t),r=(0,Gt.callExpression)(n,[]);return Vt(e,r),r}Z.makeWorkletFactoryCall=Zt;function Vt(e,t){let n=e.node.loc;n&&(t.callee.loc={filename:n.filename,identifierName:n.identifierName,start:n.start,end:n.start})}});var V=p(C=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});C.substituteObjectMethodWithObjectProperty=C.processWorklet=C.processIfWithWorkletDirective=void 0;var le=require("@babel/types"),Jt=S(),Xt=M(),$t=Ee();function Se(e,t){return!(0,le.isBlockStatement)(e.node.body)||!Yt(e.node.body.directives)?!1:(Ie(e,t),!0)}C.processIfWithWorkletDirective=Se;function Ie(e,t){t.opts.processNestedWorklets&&e.traverse({[Jt.WorkletizableFunction](r,i){Se(r,i)}},t);let n=(0,$t.makeWorkletFactoryCall)(e,t);Kt(e,n)}C.processWorklet=Ie;function Yt(e){return e.some(t=>(0,le.isDirectiveLiteral)(t.value)&&t.value.value==="worklet")}function Kt(e,t){var n;if(e.isObjectMethod())We(e,t);else{let r="id"in e.node?(n=e.node.id)===null||n===void 0?void 0:n.name:void 0;(0,Xt.replaceWithFactoryCall)(e,r,t)}}function We(e,t){let n=(0,le.objectProperty)(e.node.key,t);e.replaceWith(n)}C.substituteObjectMethodWithObjectProperty=We});var Fe=p(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.isGestureHandlerEventCallback=void 0;var I=require("@babel/types"),Qt=new Set(["Tap","Pan","Pinch","Rotation","Fling","LongPress","ForceTouch","Native","Manual","Race","Simultaneous","Exclusive","Hover"]),en=new Set(["onBegin","onStart","onEnd","onFinalize","onUpdate","onChange","onTouchesDown","onTouchesMove","onTouchesUp","onTouchesCancelled"]);function tn(e){return(0,I.isCallExpression)(e.parent)&&(0,I.isExpression)(e.parent.callee)&&nn(e.parent.callee)}J.isGestureHandlerEventCallback=tn;function nn(e){return(0,I.isMemberExpression)(e)&&(0,I.isIdentifier)(e.property)&&en.has(e.property.name)&&xe(e.object)}function xe(e){return!!(rn(e)||(0,I.isCallExpression)(e)&&(0,I.isMemberExpression)(e.callee)&&xe(e.callee.object))}function rn(e){return(0,I.isCallExpression)(e)&&(0,I.isMemberExpression)(e.callee)&&(0,I.isIdentifier)(e.callee.object)&&e.callee.object.name==="Gesture"&&(0,I.isIdentifier)(e.callee.property)&&Qt.has(e.callee.property.name)}});var je=p(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.isLayoutAnimationCallback=void 0;var W=require("@babel/types"),on=new Set(["BounceIn","BounceInDown","BounceInLeft","BounceInRight","BounceInUp","BounceOut","BounceOutDown","BounceOutLeft","BounceOutRight","BounceOutUp","FadeIn","FadeInDown","FadeInLeft","FadeInRight","FadeInUp","FadeOut","FadeOutDown","FadeOutLeft","FadeOutRight","FadeOutUp","FlipInEasyX","FlipInEasyY","FlipInXDown","FlipInXUp","FlipInYLeft","FlipInYRight","FlipOutEasyX","FlipOutEasyY","FlipOutXDown","FlipOutXUp","FlipOutYLeft","FlipOutYRight","LightSpeedInLeft","LightSpeedInRight","LightSpeedOutLeft","LightSpeedOutRight","PinwheelIn","PinwheelOut","RollInLeft","RollInRight","RollOutLeft","RollOutRight","RotateInDownLeft","RotateInDownRight","RotateInUpLeft","RotateInUpRight","RotateOutDownLeft","RotateOutDownRight","RotateOutUpLeft","RotateOutUpRight","SlideInDown","SlideInLeft","SlideInRight","SlideInUp","SlideOutDown","SlideOutLeft","SlideOutRight","SlideOutUp","StretchInX","StretchInY","StretchOutX","StretchOutY","ZoomIn","ZoomInDown","ZoomInEasyDown","ZoomInEasyUp","ZoomInLeft","ZoomInRight","ZoomInRotate","ZoomInUp","ZoomOut","ZoomOutDown","ZoomOutEasyDown","ZoomOutEasyUp","ZoomOutLeft","ZoomOutRight","ZoomOutRotate","ZoomOutUp"]),sn=new Set(["Layout","LinearTransition","SequencedTransition","FadingTransition","JumpingTransition","CurvedTransition","EntryExitTransition"]),Ce=new Set([...on,...sn]),an=new Set(["build","duration","delay","getDuration","randomDelay","getDelay","getDelayFunction"]),ln=new Set(["easing","rotate","springify","damping","mass","stiffness","overshootClamping","restDisplacementThreshold","restSpeedThreshold","withInitialValues","getAnimationAndConfig"]),cn=new Set(["easingX","easingY","easingWidth","easingHeight","entering","exiting","reverse"]),un=new Set([...an,...ln,...cn]),dn=new Set(["withCallback"]);function fn(e){return(0,W.isCallExpression)(e.parent)&&(0,W.isExpression)(e.parent.callee)&&pn(e.parent.callee)}X.isLayoutAnimationCallback=fn;function pn(e){return(0,W.isMemberExpression)(e)&&(0,W.isIdentifier)(e.property)&&dn.has(e.property.name)&&we(e.object)}function we(e){return(0,W.isIdentifier)(e)&&Ce.has(e.name)?!0:!!((0,W.isNewExpression)(e)&&(0,W.isIdentifier)(e.callee)&&Ce.has(e.callee.name)||(0,W.isCallExpression)(e)&&(0,W.isMemberExpression)(e.callee)&&(0,W.isIdentifier)(e.callee.property)&&un.has(e.callee.property.name)&&we(e.callee.object))}});var De=p($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.findReferencedWorklet=void 0;var q=S();function bn(e,t,n){let r=e.node.name,s=e.scope.getBinding(r);return s?t&&s.path.isFunctionDeclaration()?s.path:s.constant?mn(s,t,n):yn(s,t,n):void 0}$.findReferencedWorklet=bn;function mn(e,t,n){let r=e.path;if(!r.isVariableDeclarator())return;let i=r.get("init");if(t&&(0,q.isWorkletizableFunctionPath)(i)||n&&(0,q.isWorkletizableObjectPath)(i))return i}function yn(e,t,n){let r=e.constantViolations.reverse().find(s=>s.isAssignmentExpression()&&(t&&(0,q.isWorkletizableFunctionPath)(s.get("right"))||n&&(0,q.isWorkletizableObjectPath)(s.get("right"))));if(!r||!r.isAssignmentExpression())return;let i=r.get("right");if(t&&(0,q.isWorkletizableFunctionPath)(i)||n&&(0,q.isWorkletizableObjectPath)(i))return i}});var Ae=p(Y=>{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.processWorkletizableObject=void 0;var kn=S(),Re=V();function gn(e,t){let n=e.get("properties");for(let r of n)if(r.isObjectMethod())(0,Re.processWorklet)(r,t);else if(r.isObjectProperty()){let i=r.get("value");(0,kn.isWorkletizableFunctionPath)(i)&&(0,Re.processWorklet)(i,t)}else throw new Error(`[Reanimated] '${r.type}' as to-be workletized argument is not supported for object hooks.`)}Y.processWorkletizableObject=gn});var Le=p(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.processCalleesAutoworkletizableCallbacks=L.processIfAutoworkletizableCallback=void 0;var _n=require("@babel/types"),K=S(),qe=V(),On=Fe(),vn=je(),hn=De(),En=Ae(),Me=new Set(["useAnimatedGestureHandler","useAnimatedScrollHandler"]),Pe=new Set(["useFrameCallback","useAnimatedStyle","useAnimatedProps","createAnimatedPropAdapter","useDerivedValue","useAnimatedScrollHandler","useAnimatedReaction","useWorkletCallback","withTiming","withSpring","withDecay","withRepeat","runOnUI","executeOnUIRuntimeSync"]),Sn=new Map([["useAnimatedGestureHandler",[0]],["useFrameCallback",[0]],["useAnimatedStyle",[0]],["useAnimatedProps",[0]],["createAnimatedPropAdapter",[0]],["useDerivedValue",[0]],["useAnimatedScrollHandler",[0]],["useAnimatedReaction",[0,1]],["useWorkletCallback",[0]],["withTiming",[2]],["withSpring",[2]],["withDecay",[1]],["withRepeat",[3]],["runOnUI",[0]],["executeOnUIRuntimeSync",[0]]]);function In(e,t){return(0,On.isGestureHandlerEventCallback)(e)||(0,vn.isLayoutAnimationCallback)(e)?((0,qe.processWorklet)(e,t),!0):!1}L.processIfAutoworkletizableCallback=In;function Wn(e,t){let n=(0,_n.isSequenceExpression)(e.node.callee)?e.node.callee.expressions[e.node.callee.expressions.length-1]:e.node.callee,r="name"in n?n.name:"property"in n&&"name"in n.property?n.property.name:void 0;if(r!==void 0&&(Pe.has(r)||Me.has(r))){let i=Pe.has(r),s=Me.has(r),l=Sn.get(r),u=e.get("arguments").filter((f,g)=>l.includes(g));xn(u,t,i,s)}}L.processCalleesAutoworkletizableCallbacks=Wn;function xn(e,t,n,r){e.forEach(i=>{let s=Fn(i,n,r);s&&((0,K.isWorkletizableFunctionPath)(s)?(0,qe.processWorklet)(s,t):(0,K.isWorkletizableObjectPath)(s)&&(0,En.processWorkletizableObject)(s,t))})}function Fn(e,t,n){if(t&&(0,K.isWorkletizableFunctionPath)(e)||n&&(0,K.isWorkletizableObjectPath)(e))return e;if(e.isReferencedIdentifier()&&e.isIdentifier())return(0,hn.findReferencedWorklet)(e,t,n)}});var Ue=p(z=>{"use strict";var ze=z&&z.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(z,"__esModule",{value:!0});z.processIfWorkletClass=void 0;var Cn=require("@babel/core"),wn=ze(require("@babel/generator")),jn=ze(require("@babel/traverse")),a=require("@babel/types"),Q=require("assert"),Dn=S(),Rn=M(),Ne="__workletClass";function An(e,t){return!e.node.id||!Nn(e.node.body)?!1:(Tn(e.node.body),Mn(e,t),!0)}z.processIfWorkletClass=An;function Mn(e,t){(0,Q.strict)(e.node.id);let n=e.node.id.name,r=Pn(e.node,t);Un(r),qn(r.program.body),Ln(r.program.body,n),r.program.body.push((0,a.returnStatement)((0,a.identifier)(n)));let i=(0,a.functionExpression)(null,[],(0,a.blockStatement)([...r.program.body])),s=(0,a.callExpression)(i,[]);(0,Rn.replaceWithFactoryCall)(e,n,s)}function Pn(e,t){let n=(0,wn.default)(e).code,r=(0,Cn.transformSync)(n,{plugins:["@babel/plugin-transform-class-properties","@babel/plugin-transform-classes","@babel/plugin-transform-unicode-regex"],filename:t.file.opts.filename,ast:!0,babelrc:!1,configFile:!1});return(0,Q.strict)(r&&r.ast),r.ast}function qn(e){e.forEach(t=>{if((0,a.isFunctionDeclaration)(t)){let n=(0,a.directive)((0,a.directiveLiteral)("worklet"));t.body.directives.push(n)}})}function Ln(e,t){let n=t+Dn.workletClassFactorySuffix,r=zn(e,t),s=e[r].declarations[0].init,l=(0,a.functionDeclaration)((0,a.identifier)(n),[],(0,a.blockStatement)([(0,a.variableDeclaration)("const",[(0,a.variableDeclarator)((0,a.identifier)(t),s)]),(0,a.expressionStatement)((0,a.assignmentExpression)("=",(0,a.memberExpression)((0,a.identifier)(t),(0,a.identifier)(n)),(0,a.identifier)(n))),(0,a.returnStatement)((0,a.identifier)(t))],[(0,a.directive)((0,a.directiveLiteral)("worklet"))])),u=(0,a.variableDeclaration)("const",[(0,a.variableDeclarator)((0,a.identifier)(t),(0,a.callExpression)((0,a.identifier)(n),[]))]);e.splice(r,1,l,u)}function zn(e,t){let n=e.findIndex(r=>(0,a.isVariableDeclaration)(r)&&r.declarations.some(i=>(0,a.isIdentifier)(i.id)&&i.id.name===t));return(0,Q.strict)(n>=0),n}function Nn(e){return e.body.some(t=>(0,a.isClassProperty)(t)&&(0,a.isIdentifier)(t.key)&&t.key.name===Ne)}function Tn(e){e.body=e.body.filter(t=>!(0,a.isClassProperty)(t)||!(0,a.isIdentifier)(t.key)||t.key.name!==Ne)}function Un(e){let t=Bn(e),n=Gn(t),r=t.map(u=>u.index),i=n.map(u=>u.index),s=e.program.body,l=[...s];for(let u=0;u{n.get("body").forEach((i,s)=>{var l;let u=i.getBindingIdentifiers();if(!i.isFunctionDeclaration()||!(!((l=i.node.id)===null||l===void 0)&&l.name))return;let f={name:i.node.id.name,index:s,dependencies:new Set};t.push(f),i.traverse({Identifier(g){Hn(g,u,i)&&f.dependencies.add(g.node.name)}})})}}}),t}function Gn(e){let t=[],n=new Set;for(let r of e)Te(r,e,t,n);return t}function Te(e,t,n,r){if(r.has(e.name))throw new Error("Cycle detected. This should never happen.");if(!n.find(i=>i.name===e.name)){r.add(e.name);for(let i of e.dependencies)if(!n.find(s=>s.name===i)){let s=t.find(l=>l.name===i);(0,Q.strict)(s),Te(s,t,n,r)}n.push(e),r.delete(e.name)}}function Hn(e,t,n){return e.isReferencedIdentifier()&&!(e.node.name in t)&&!n.scope.hasOwnBinding(e.node.name)&&n.scope.hasReference(e.node.name)}});var ce=p(E=>{"use strict";Object.defineProperty(E,"__esModule",{value:!0});E.isContextObject=E.processIfWorkletContextObject=E.contextObjectMarker=void 0;var h=require("@babel/types");E.contextObjectMarker="__workletContextObject";function Zn(e,t){return Be(e.node)?(Jn(e.node),Vn(e.node),!0):!1}E.processIfWorkletContextObject=Zn;function Be(e){return e.properties.some(t=>(0,h.isObjectProperty)(t)&&(0,h.isIdentifier)(t.key)&&t.key.name===E.contextObjectMarker)}E.isContextObject=Be;function Vn(e){let t=(0,h.functionExpression)(null,[],(0,h.blockStatement)([(0,h.returnStatement)((0,h.cloneNode)(e))],[(0,h.directive)((0,h.directiveLiteral)("worklet"))]));e.properties.push((0,h.objectProperty)((0,h.identifier)(`${E.contextObjectMarker}Factory`),t))}function Jn(e){e.properties=e.properties.filter(t=>!((0,h.isObjectProperty)(t)&&(0,h.isIdentifier)(t.key)&&t.key.name===E.contextObjectMarker))}});var Je=p(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.isImplicitContextObject=N.processIfWorkletFile=void 0;var b=require("@babel/types"),Ge=S(),He=ce();function Xn(e,t){return e.node.directives.some(n=>n.value.value==="worklet")?(e.node.directives=e.node.directives.filter(n=>n.value.value!=="worklet"),$n(e),!0):!1}N.processIfWorkletFile=Xn;function $n(e){let t=e.get("body");ir(e.node),t.forEach(n=>{let r=Yn(n);ue(r)})}function Yn(e){return e.isExportNamedDeclaration()||e.isExportDefaultDeclaration()?e.get("declaration"):e}function ue(e){(0,Ge.isWorkletizableFunctionPath)(e)?(e.isArrowFunctionExpression()&&er(e.node),Ze(e.node.body)):(0,Ge.isWorkletizableObjectPath)(e)?Ve(e)?tr(e.node):Qn(e):e.isVariableDeclaration()?Kn(e):e.isClassDeclaration()&&rr(e.node.body)}function Kn(e){e.get("declarations").forEach(n=>{let r=n.get("init");r.isExpression()&&ue(r)})}function Qn(e){e.get("properties").forEach(n=>{if(n.isObjectMethod())Ze(n.node.body);else if(n.isObjectProperty()){let r=n.get("value");ue(r)}})}function er(e){(0,b.isBlockStatement)(e.body)||(e.body=(0,b.blockStatement)([(0,b.returnStatement)(e.body)]))}function Ze(e){e.directives.some(t=>t.value.value==="worklet")||e.directives.push((0,b.directive)((0,b.directiveLiteral)("worklet")))}function tr(e){e.properties.some(t=>(0,b.isObjectProperty)(t)&&(0,b.isIdentifier)(t.key)&&t.key.name===He.contextObjectMarker)||e.properties.push((0,b.objectProperty)((0,b.identifier)(`${He.contextObjectMarker}`),(0,b.booleanLiteral)(!0)))}function Ve(e){return e.get("properties").some(n=>n.isObjectMethod()?nr(n):!1)}N.isImplicitContextObject=Ve;function nr(e){let t=!1;return e.traverse({ThisExpression(n){t=!0,n.stop()}}),t}function rr(e){e.body.push((0,b.classProperty)((0,b.identifier)("__workletClass"),(0,b.booleanLiteral)(!0)))}function ir(e){let t=e.body,n=t.length,r=0;for(;r{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.processInlineStylesWarning=void 0;var d=require("@babel/types"),sr=M(),de=require("assert");function ar(e){return(0,d.callExpression)((0,d.arrowFunctionExpression)([],(0,d.blockStatement)([(0,d.expressionStatement)((0,d.callExpression)((0,d.memberExpression)((0,d.identifier)("console"),(0,d.identifier)("warn")),[(0,d.callExpression)((0,d.memberExpression)((0,d.callExpression)((0,d.identifier)("require"),[(0,d.stringLiteral)("react-native-reanimated")]),(0,d.identifier)("getUseOfValueInStyleWarning")),[])])),(0,d.returnStatement)(e.node)])),[])}function lr(e){e.isMemberExpression()&&(0,d.isIdentifier)(e.node.property)&&e.node.property.name==="value"&&e.replaceWith(ar(e))}function cr(e){if((0,d.isArrayExpression)(e.node)){let t=e.get("elements");(0,de.strict)(Array.isArray(t),"[Reanimated] `elements` should be an array.");for(let n of t)n.isObjectExpression()&&fe(n)}}function fe(e){let t=e.get("properties");for(let n of t)if(n.isObjectProperty()){let r=n.get("value");(0,d.isIdentifier)(n.node.key)&&n.node.key.name==="transform"?cr(r):lr(r)}}function ur(e,t){if((0,sr.isRelease)()||t.opts.disableInlineStylesWarning||e.node.name.name!=="style"||!(0,d.isJSXExpressionContainer)(e.node.value))return;let n=e.get("value").get("expression");if((0,de.strict)(!Array.isArray(n),"[Reanimated] `expression` should not be an array."),n.isArrayExpression()){let r=n.get("elements");(0,de.strict)(Array.isArray(r),"[Reanimated] `elements` should be an array.");for(let i of r)i.isObjectExpression()&&fe(i)}else n.isObjectExpression()&&fe(n)}ee.processInlineStylesWarning=ur});var Ye=p(te=>{"use strict";Object.defineProperty(te,"__esModule",{value:!0});te.substituteWebCallExpression=void 0;var $e=require("@babel/types");function dr(e){let t=e.node.callee;if((0,$e.isIdentifier)(t)){let n=t.name;(n==="isWeb"||n==="shouldBeUseWeb")&&e.replaceWith((0,$e.booleanLiteral)(!0))}}te.substituteWebCallExpression=dr});Object.defineProperty(exports,"__esModule",{value:!0});var Ke=Le(),fr=Ue(),pr=ce(),br=Je(),mr=oe(),yr=Xe(),kr=S(),gr=Ye(),_r=V();module.exports=function(){function e(t){try{t()}catch(n){throw new Error(`[Reanimated] Babel plugin exception: ${n}`)}}return{name:"reanimated",pre(){e(()=>{(0,mr.initializeState)(this)})},visitor:{CallExpression:{enter(t,n){e(()=>{(0,Ke.processCalleesAutoworkletizableCallbacks)(t,n),n.opts.substituteWebPlatformChecks&&(0,gr.substituteWebCallExpression)(t)})}},[kr.WorkletizableFunction]:{enter(t,n){e(()=>{(0,_r.processIfWithWorkletDirective)(t,n)||(0,Ke.processIfAutoworkletizableCallback)(t,n)})}},ObjectExpression:{enter(t,n){e(()=>{(0,pr.processIfWorkletContextObject)(t,n)})}},ClassDeclaration:{enter(t,n){e(()=>{(0,fr.processIfWorkletClass)(t,n)})}},Program:{enter(t,n){e(()=>{(0,br.processIfWorkletFile)(t,n)})}},JSXAttribute:{enter(t,n){e(()=>(0,yr.processInlineStylesWarning)(t,n))}}}}}; +"use strict";var et=Object.create;var me=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var nt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ot=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of rt(t))!it.call(e,i)&&i!==r&&me(e,i,{get:()=>t[i],enumerable:!(n=tt(t,i))||n.enumerable});return e};var R=(e,t,r)=>(r=e!=null?et(nt(e)):{},ot(t||!e||!e.__esModule?me(r,"default",{value:e,enumerable:!0}):r,e));var S=f(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.workletClassFactorySuffix=m.isWorkletizableObjectNode=m.isWorkletizableObjectPath=m.isWorkletizableFunctionNode=m.isWorkletizableFunctionPath=m.WorkletizableObject=m.WorkletizableFunction=void 0;var B=require("@babel/types");m.WorkletizableFunction="FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod";m.WorkletizableObject="ObjectExpression";function st(e){return e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression()||e.isObjectMethod()}m.isWorkletizableFunctionPath=st;function at(e){return(0,B.isFunctionDeclaration)(e)||(0,B.isFunctionExpression)(e)||(0,B.isArrowFunctionExpression)(e)||(0,B.isObjectMethod)(e)}m.isWorkletizableFunctionNode=at;function lt(e){return e.isObjectExpression()}m.isWorkletizableObjectPath=lt;function ct(e){return(0,B.isObjectExpression)(e)}m.isWorkletizableObjectNode=ct;m.workletClassFactorySuffix="__classFactory"});var P=f(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.replaceWithFactoryCall=A.isRelease=void 0;var G=require("@babel/types");function ut(){var e,t;let r=/(prod|release|stag[ei])/i;return!!(!((e=process.env.BABEL_ENV)===null||e===void 0)&&e.match(r)||!((t=process.env.NODE_ENV)===null||t===void 0)&&t.match(r))}A.isRelease=ut;function dt(e,t,r){if(!t||!ft(e))e.replaceWith(r);else{let n=(0,G.variableDeclaration)("const",[(0,G.variableDeclarator)((0,G.identifier)(t),r)]);e.replaceWith(n)}}A.replaceWithFactoryCall=dt;function ft(e){return(0,G.isScopable)(e.parent)||(0,G.isExportNamedDeclaration)(e.parent)}});var ae=f(k=>{"use strict";Object.defineProperty(k,"__esModule",{value:!0});k.addCustomGlobals=k.initializeGlobals=k.globals=k.defaultGlobals=k.initializeState=void 0;var pt=["globalThis","Infinity","NaN","undefined","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape","Object","Function","Boolean","Symbol","Error","AggregateError","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","InternalError","Number","BigInt","Math","Date","String","RegExp","Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","BigInt64Array","BigUint64Array","Float32Array","Float64Array","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Atomics","JSON","WeakRef","FinalizationRegistry","Iterator","AsyncIterator","Promise","GeneratorFunction","AsyncGeneratorFunction","Generator","AsyncGenerator","AsyncFunction","Reflect","Proxy","Intl","null","this","global","window","globalThis","console","performance","queueMicrotask","requestAnimationFrame","setImmediate","arguments","HermesInternal","_WORKLET","ReanimatedError","__reanimatedLoggerConfig"],bt=["_IS_FABRIC","_log","_toString","_scheduleHostFunctionOnJS","_scheduleRemoteFunctionOnJS","_scheduleOnRuntime","_makeShareableClone","_updatePropsPaper","_updatePropsFabric","_removeFromPropsRegistry","_measurePaper","_measureFabric","_scrollToPaper","_dispatchCommandPaper","_dispatchCommandFabric","_setGestureState","_notifyAboutProgress","_notifyAboutEnd","_runOnUIQueue","_getAnimationTimestamp"];function mt(e){e.workletNumber=1,ye(),ke(e)}k.initializeState=mt;k.defaultGlobals=new Set(pt.concat(bt));function ye(){k.globals=new Set(k.defaultGlobals)}k.initializeGlobals=ye;function ke(e){e.opts&&Array.isArray(e.opts.globals)&&e.opts.globals.forEach(t=>{k.globals.add(t)})}k.addCustomGlobals=ke});var V=f(M=>{"use strict";var yt=M&&M.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i{"use strict";var vt=v&&v.__createBinding||(Object.create?function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]}),ht=v&&v.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),ge=v&&v.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)r!=="default"&&Object.prototype.hasOwnProperty.call(e,r)&&vt(t,e,r);return ht(t,e),t},Et=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.buildWorkletString=void 0;var _e=require("@babel/core"),St=Et(require("@babel/generator")),c=require("@babel/types"),H=require("assert"),It=ge(require("convert-source-map")),xt=ge(require("fs")),wt=S(),Wt=P(),Ft=V(),Ct="mock source map";function jt(e,t,r,n,i){Dt(e,n);let s=e.program.body.find(_=>(0,c.isFunctionDeclaration)(_))||e.program.body.find(_=>(0,c.isExpressionStatement)(_))||void 0;(0,H.strict)(s,"[Reanimated] `draftExpression` is undefined.");let l=(0,c.isFunctionDeclaration)(s)?s:s.expression;(0,H.strict)("params"in l,"'params' property is undefined in 'expression'"),(0,H.strict)((0,c.isBlockStatement)(l.body),"[Reanimated] `expression.body` is not a `BlockStatement`");let u=new Set;(0,_e.traverse)(e,{NewExpression(_){if(!(0,c.isIdentifier)(_.node.callee))return;let w=_.node.callee.name;if(!r.some(Z=>Z.name===w)||u.has(w))return;let D=r.findIndex(Z=>Z.name===w);r.splice(D,1);let ie=w+wt.workletClassFactorySuffix;r.push((0,c.identifier)(ie)),(0,c.assertBlockStatement)(l.body),l.body.body.unshift((0,c.variableDeclaration)("const",[(0,c.variableDeclarator)((0,c.identifier)(w),(0,c.callExpression)((0,c.identifier)(ie),[]))])),u.add(w)}});let p=(0,c.functionExpression)((0,c.identifier)(n),l.params,l.body,l.generator,l.async),g=(0,St.default)(p).code;(0,H.strict)(i,"[Reanimated] `inputMap` is undefined.");let O=!((0,Wt.isRelease)()||t.opts.disableSourceMaps);if(O){i.sourcesContent=[];for(let _ of i.sources)i.sourcesContent.push(xt.readFileSync(_).toString("utf-8"))}let j=(0,Ft.workletTransformSync)(g,{filename:t.file.opts.filename,extraPlugins:[Mt(r)],compact:!0,sourceMaps:O,inputSourceMap:i,ast:!1,babelrc:!1,configFile:!1,comments:!1});(0,H.strict)(j,"[Reanimated] `transformed` is null.");let C;return O&&(Rt()?C=Ct:(C=It.fromObject(j.map).toObject(),delete C.sourcesContent)),[j.code,JSON.stringify(C)]}v.buildWorkletString=jt;function Dt(e,t){(0,_e.traverse)(e,{FunctionExpression(r){if(!r.node.id){r.stop();return}let n=r.node.id.name;r.scope.rename(n,t)}})}function Rt(){return process.env.REANIMATED_JEST_SHOULD_MOCK_SOURCE_MAP==="1"}function At(e,t,r){t.length===0||!(0,c.isProgram)(e.parent)||(0,c.isExpression)(e.node.body)||e.node.body.body.unshift(r)}function Pt(e){var t;(0,c.isProgram)(e.parent)&&!(0,c.isArrowFunctionExpression)(e.node)&&!(0,c.isObjectMethod)(e.node)&&e.node.id&&e.scope.parent&&((t=e.scope.parent.bindings[e.node.id.name])===null||t===void 0?void 0:t.references)>0&&e.node.body.body.unshift((0,c.variableDeclaration)("const",[(0,c.variableDeclarator)((0,c.identifier)(e.node.id.name),(0,c.memberExpression)((0,c.thisExpression)(),(0,c.identifier)("_recur")))]))}function Mt(e){let t=(0,c.variableDeclaration)("const",[(0,c.variableDeclarator)((0,c.objectPattern)(e.map(r=>(0,c.objectProperty)((0,c.identifier)(r.name),(0,c.identifier)(r.name),!1,!0))),(0,c.memberExpression)((0,c.thisExpression)(),(0,c.identifier)("__closure")))]);return{visitor:{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod":r=>{At(r,e,t),Pt(r)}}}}});var Ee=f(q=>{"use strict";var qt=q&&q.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(q,"__esModule",{value:!0});q.makeWorkletFactory=void 0;var Lt=require("@babel/core"),zt=qt(require("@babel/generator")),o=require("@babel/types"),W=require("assert"),he=require("path"),Tt=ae(),ve=S(),le=P(),Nt=Oe(),Ut=V(),Bt=require("../package.json").version,Gt="x.y.z";function Ht(e,t){Zt(e),(0,W.strict)(t.file.opts.filename,"[Reanimated] `state.file.opts.filename` is undefined.");let r=(0,zt.default)(e.node,{sourceMaps:!0,sourceFileName:t.file.opts.filename});r.code="("+(e.isObjectMethod()?"function ":"")+r.code+` +)`;let n=(0,Ut.workletTransformSync)(r.code,{extraPlugins:Yt,filename:t.file.opts.filename,ast:!0,babelrc:!1,configFile:!1,inputSourceMap:r.map});(0,W.strict)(n,"[Reanimated] `transformed` is undefined."),(0,W.strict)(n.ast,"[Reanimated] `transformed.ast` is undefined.");let i=$t(n.ast,e),s=(0,o.cloneNode)(e.node),l=(0,o.isBlockStatement)(s.body)?(0,o.functionExpression)(null,s.params,s.body,s.generator,s.async):s,{workletName:u,reactName:p}=Xt(e,t),[g,O]=(0,Nt.buildWorkletString)(n.ast,t,i,u,n.map);(0,W.strict)(g,"[Reanimated] `funString` is undefined.");let j=Jt(g),C=1;i.length>0&&(C-=i.length+2);let _=e.parentPath.isProgram()?e:e.findParent(y=>{var oe,se;return(se=(oe=y.parentPath)===null||oe===void 0?void 0:oe.isProgram())!==null&&se!==void 0?se:!1});(0,W.strict)(_,"[Reanimated] `pathForStringDefinitions` is null."),(0,W.strict)(_.parentPath,"[Reanimated] `pathForStringDefinitions.parentPath` is null.");let w=_.parentPath.scope.generateUidIdentifier(`worklet_${j}_init_data`),D=(0,o.objectExpression)([(0,o.objectProperty)((0,o.identifier)("code"),(0,o.stringLiteral)(g))]);if(!(0,le.isRelease)()){let y=t.file.opts.filename;t.opts.relativeSourceLocation&&(y=(0,he.relative)(t.cwd,y),O=O==null?void 0:O.replace(t.file.opts.filename,y)),D.properties.push((0,o.objectProperty)((0,o.identifier)("location"),(0,o.stringLiteral)(y)))}O&&D.properties.push((0,o.objectProperty)((0,o.identifier)("sourceMap"),(0,o.stringLiteral)(O))),!(0,le.isRelease)()&&D.properties.push((0,o.objectProperty)((0,o.identifier)("version"),(0,o.stringLiteral)(Vt()?Gt:Bt)));let be=!t.opts.omitNativeOnlyData;be&&_.insertBefore((0,o.variableDeclaration)("const",[(0,o.variableDeclarator)(w,D)])),(0,W.strict)(!(0,o.isFunctionDeclaration)(l),"[Reanimated] `funExpression` is a `FunctionDeclaration`."),(0,W.strict)(!(0,o.isObjectMethod)(l),"[Reanimated] `funExpression` is an `ObjectMethod`.");let U=[(0,o.variableDeclaration)("const",[(0,o.variableDeclarator)((0,o.identifier)(p),l)]),(0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(p),(0,o.identifier)("__closure"),!1),(0,o.objectExpression)(i.map(y=>y.name.endsWith(ve.workletClassFactorySuffix)?(0,o.objectProperty)((0,o.identifier)(y.name),(0,o.memberExpression)((0,o.identifier)(y.name.slice(0,y.name.length-ve.workletClassFactorySuffix.length)),(0,o.identifier)(y.name))):(0,o.objectProperty)((0,o.identifier)(y.name),y,!1,!0))))),(0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(p),(0,o.identifier)("__workletHash"),!1),(0,o.numericLiteral)(j)))];return be&&U.push((0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(p),(0,o.identifier)("__initData"),!1),w))),(0,le.isRelease)()||(U.unshift((0,o.variableDeclaration)("const",[(0,o.variableDeclarator)((0,o.identifier)("_e"),(0,o.arrayExpression)([(0,o.newExpression)((0,o.memberExpression)((0,o.identifier)("global"),(0,o.identifier)("Error")),[]),(0,o.numericLiteral)(C),(0,o.numericLiteral)(-27)]))])),U.push((0,o.expressionStatement)((0,o.assignmentExpression)("=",(0,o.memberExpression)((0,o.identifier)(p),(0,o.identifier)("__stackDetails"),!1),(0,o.identifier)("_e"))))),U.push((0,o.returnStatement)((0,o.identifier)(p))),(0,o.functionExpression)(void 0,[],(0,o.blockStatement)(U))}q.makeWorkletFactory=Ht;function Zt(e){e.traverse({DirectiveLiteral(t){t.node.value==="worklet"&&t.getFunctionParent()===e&&t.parentPath.remove()}})}function Vt(){return process.env.REANIMATED_JEST_SHOULD_MOCK_VERSION==="1"}function Jt(e){let t=e.length,r=5381,n=52711;for(;t--;){let i=e.charCodeAt(t);r=r*33^i,n=n*33^i}return(r>>>0)*4096+(n>>>0)}function Xt(e,t){let r="unknownFile";if(t.file.opts.filename){let l=t.file.opts.filename;r=(0,he.basename)(l);let u=l.split("/"),p=u.indexOf("node_modules");p!==-1&&(r=`${u[p+1]}_${r}`)}let n=`${r}${t.workletNumber++}`,i="";(0,o.isObjectMethod)(e.node)&&(0,o.isIdentifier)(e.node.key)?i=e.node.key.name:((0,o.isFunctionDeclaration)(e.node)||(0,o.isFunctionExpression)(e.node))&&(0,o.isIdentifier)(e.node.id)&&(i=e.node.id.name);let s=i?(0,o.toIdentifier)(`${i}_${n}`):(0,o.toIdentifier)(n);return i=i||(0,o.toIdentifier)(n),{workletName:s,reactName:i}}function $t(e,t){let r=new Map,n=new Map;return(0,Lt.traverse)(e,{Identifier(i){if(!i.isReferencedIdentifier())return;let s=i.node.name;if(Tt.globals.has(s)||"id"in t.node&&t.node.id&&t.node.id.name===s)return;let l=i.parent;if((0,o.isMemberExpression)(l)&&l.property===i.node&&!l.computed||(0,o.isObjectProperty)(l)&&(0,o.isObjectExpression)(i.parentPath.parent)&&i.node!==l.value)return;let u=i.scope;for(;u!=null;){if(u.bindings[s]!=null)return;u=u.parent}r.set(s,i.node),n.set(s,!1)}}),t.traverse({Identifier(i){if(!i.isReferencedIdentifier())return;let s=r.get(i.node.name);!s||n.get(i.node.name)||(s.loc=i.node.loc,n.set(i.node.name,!0))}}),Array.from(r.values())}var Yt=[require.resolve("@babel/plugin-transform-shorthand-properties"),require.resolve("@babel/plugin-transform-arrow-functions"),require.resolve("@babel/plugin-transform-optional-chaining"),require.resolve("@babel/plugin-transform-nullish-coalescing-operator"),[require.resolve("@babel/plugin-transform-template-literals"),{loose:!0}]]});var Se=f(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.makeWorkletFactoryCall=void 0;var Kt=require("@babel/types"),Qt=Ee();function er(e,t){let r=(0,Qt.makeWorkletFactory)(e,t),n=(0,Kt.callExpression)(r,[]);return tr(e,n),n}J.makeWorkletFactoryCall=er;function tr(e,t){let r=e.node.loc;r&&(t.callee.loc={filename:r.filename,identifierName:r.identifierName,start:r.start,end:r.start})}});var X=f(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.substituteObjectMethodWithObjectProperty=F.processWorklet=F.processIfWithWorkletDirective=void 0;var ce=require("@babel/types"),rr=S(),nr=P(),ir=Se();function Ie(e,t){return!(0,ce.isBlockStatement)(e.node.body)||!or(e.node.body.directives)?!1:(xe(e,t),!0)}F.processIfWithWorkletDirective=Ie;function xe(e,t){t.opts.processNestedWorklets&&e.traverse({[rr.WorkletizableFunction](n,i){Ie(n,i)}},t);let r=(0,ir.makeWorkletFactoryCall)(e,t);sr(e,r)}F.processWorklet=xe;function or(e){return e.some(t=>(0,ce.isDirectiveLiteral)(t.value)&&t.value.value==="worklet")}function sr(e,t){var r;if(e.isObjectMethod())we(e,t);else{let n="id"in e.node?(r=e.node.id)===null||r===void 0?void 0:r.name:void 0;(0,nr.replaceWithFactoryCall)(e,n,t)}}function we(e,t){let r=(0,ce.objectProperty)(e.node.key,t);e.replaceWith(r)}F.substituteObjectMethodWithObjectProperty=we});var Fe=f($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.isGestureHandlerEventCallback=void 0;var I=require("@babel/types"),ar=new Set(["Tap","Pan","Pinch","Rotation","Fling","LongPress","ForceTouch","Native","Manual","Race","Simultaneous","Exclusive","Hover"]),lr=new Set(["onBegin","onStart","onEnd","onFinalize","onUpdate","onChange","onTouchesDown","onTouchesMove","onTouchesUp","onTouchesCancelled"]);function cr(e){return(0,I.isCallExpression)(e.parent)&&(0,I.isExpression)(e.parent.callee)&&ur(e.parent.callee)}$.isGestureHandlerEventCallback=cr;function ur(e){return(0,I.isMemberExpression)(e)&&(0,I.isIdentifier)(e.property)&&lr.has(e.property.name)&&We(e.object)}function We(e){return!!(dr(e)||(0,I.isCallExpression)(e)&&(0,I.isMemberExpression)(e.callee)&&We(e.callee.object))}function dr(e){return(0,I.isCallExpression)(e)&&(0,I.isMemberExpression)(e.callee)&&(0,I.isIdentifier)(e.callee.object)&&e.callee.object.name==="Gesture"&&(0,I.isIdentifier)(e.callee.property)&&ar.has(e.callee.property.name)}});var De=f(Y=>{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.isLayoutAnimationCallback=void 0;var x=require("@babel/types"),fr=new Set(["BounceIn","BounceInDown","BounceInLeft","BounceInRight","BounceInUp","BounceOut","BounceOutDown","BounceOutLeft","BounceOutRight","BounceOutUp","FadeIn","FadeInDown","FadeInLeft","FadeInRight","FadeInUp","FadeOut","FadeOutDown","FadeOutLeft","FadeOutRight","FadeOutUp","FlipInEasyX","FlipInEasyY","FlipInXDown","FlipInXUp","FlipInYLeft","FlipInYRight","FlipOutEasyX","FlipOutEasyY","FlipOutXDown","FlipOutXUp","FlipOutYLeft","FlipOutYRight","LightSpeedInLeft","LightSpeedInRight","LightSpeedOutLeft","LightSpeedOutRight","PinwheelIn","PinwheelOut","RollInLeft","RollInRight","RollOutLeft","RollOutRight","RotateInDownLeft","RotateInDownRight","RotateInUpLeft","RotateInUpRight","RotateOutDownLeft","RotateOutDownRight","RotateOutUpLeft","RotateOutUpRight","SlideInDown","SlideInLeft","SlideInRight","SlideInUp","SlideOutDown","SlideOutLeft","SlideOutRight","SlideOutUp","StretchInX","StretchInY","StretchOutX","StretchOutY","ZoomIn","ZoomInDown","ZoomInEasyDown","ZoomInEasyUp","ZoomInLeft","ZoomInRight","ZoomInRotate","ZoomInUp","ZoomOut","ZoomOutDown","ZoomOutEasyDown","ZoomOutEasyUp","ZoomOutLeft","ZoomOutRight","ZoomOutRotate","ZoomOutUp"]),pr=new Set(["Layout","LinearTransition","SequencedTransition","FadingTransition","JumpingTransition","CurvedTransition","EntryExitTransition"]),Ce=new Set([...fr,...pr]),br=new Set(["build","duration","delay","getDuration","randomDelay","getDelay","getDelayFunction"]),mr=new Set(["easing","rotate","springify","damping","mass","stiffness","overshootClamping","restDisplacementThreshold","restSpeedThreshold","withInitialValues","getAnimationAndConfig"]),yr=new Set(["easingX","easingY","easingWidth","easingHeight","entering","exiting","reverse"]),kr=new Set([...br,...mr,...yr]),gr=new Set(["withCallback"]);function _r(e){return(0,x.isCallExpression)(e.parent)&&(0,x.isExpression)(e.parent.callee)&&Or(e.parent.callee)}Y.isLayoutAnimationCallback=_r;function Or(e){return(0,x.isMemberExpression)(e)&&(0,x.isIdentifier)(e.property)&&gr.has(e.property.name)&&je(e.object)}function je(e){return(0,x.isIdentifier)(e)&&Ce.has(e.name)?!0:!!((0,x.isNewExpression)(e)&&(0,x.isIdentifier)(e.callee)&&Ce.has(e.callee.name)||(0,x.isCallExpression)(e)&&(0,x.isMemberExpression)(e.callee)&&(0,x.isIdentifier)(e.callee.property)&&kr.has(e.callee.property.name)&&je(e.callee.object))}});var Re=f(K=>{"use strict";Object.defineProperty(K,"__esModule",{value:!0});K.findReferencedWorklet=void 0;var L=S();function vr(e,t,r){let n=e.node.name,s=e.scope.getBinding(n);return s?t&&s.path.isFunctionDeclaration()?s.path:s.constant?hr(s,t,r):Er(s,t,r):void 0}K.findReferencedWorklet=vr;function hr(e,t,r){let n=e.path;if(!n.isVariableDeclarator())return;let i=n.get("init");if(t&&(0,L.isWorkletizableFunctionPath)(i)||r&&(0,L.isWorkletizableObjectPath)(i))return i}function Er(e,t,r){let n=e.constantViolations.reverse().find(s=>s.isAssignmentExpression()&&(t&&(0,L.isWorkletizableFunctionPath)(s.get("right"))||r&&(0,L.isWorkletizableObjectPath)(s.get("right"))));if(!n||!n.isAssignmentExpression())return;let i=n.get("right");if(t&&(0,L.isWorkletizableFunctionPath)(i)||r&&(0,L.isWorkletizableObjectPath)(i))return i}});var Pe=f(Q=>{"use strict";Object.defineProperty(Q,"__esModule",{value:!0});Q.processWorkletizableObject=void 0;var Sr=S(),Ae=X();function Ir(e,t){let r=e.get("properties");for(let n of r)if(n.isObjectMethod())(0,Ae.processWorklet)(n,t);else if(n.isObjectProperty()){let i=n.get("value");(0,Sr.isWorkletizableFunctionPath)(i)&&(0,Ae.processWorklet)(i,t)}else throw new Error(`[Reanimated] '${n.type}' as to-be workletized argument is not supported for object hooks.`)}Q.processWorkletizableObject=Ir});var ze=f(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.processCalleesAutoworkletizableCallbacks=z.processIfAutoworkletizableCallback=void 0;var xr=require("@babel/types"),ee=S(),Le=X(),wr=Fe(),Wr=De(),Fr=Re(),Cr=Pe(),Me=new Set(["useAnimatedGestureHandler","useAnimatedScrollHandler"]),qe=new Set(["useFrameCallback","useAnimatedStyle","useAnimatedProps","createAnimatedPropAdapter","useDerivedValue","useAnimatedScrollHandler","useAnimatedReaction","useWorkletCallback","withTiming","withSpring","withDecay","withRepeat","runOnUI","executeOnUIRuntimeSync"]),jr=new Map([["useAnimatedGestureHandler",[0]],["useFrameCallback",[0]],["useAnimatedStyle",[0]],["useAnimatedProps",[0]],["createAnimatedPropAdapter",[0]],["useDerivedValue",[0]],["useAnimatedScrollHandler",[0]],["useAnimatedReaction",[0,1]],["useWorkletCallback",[0]],["withTiming",[2]],["withSpring",[2]],["withDecay",[1]],["withRepeat",[3]],["runOnUI",[0]],["executeOnUIRuntimeSync",[0]]]);function Dr(e,t){return(0,wr.isGestureHandlerEventCallback)(e)||(0,Wr.isLayoutAnimationCallback)(e)?((0,Le.processWorklet)(e,t),!0):!1}z.processIfAutoworkletizableCallback=Dr;function Rr(e,t){let r=(0,xr.isSequenceExpression)(e.node.callee)?e.node.callee.expressions[e.node.callee.expressions.length-1]:e.node.callee,n="name"in r?r.name:"property"in r&&"name"in r.property?r.property.name:void 0;if(n!==void 0&&(qe.has(n)||Me.has(n))){let i=qe.has(n),s=Me.has(n),l=jr.get(n),u=e.get("arguments").filter((p,g)=>l.includes(g));Ar(u,t,i,s)}}z.processCalleesAutoworkletizableCallbacks=Rr;function Ar(e,t,r,n){e.forEach(i=>{let s=Pr(i,r,n);s&&((0,ee.isWorkletizableFunctionPath)(s)?(0,Le.processWorklet)(s,t):(0,ee.isWorkletizableObjectPath)(s)&&(0,Cr.processWorkletizableObject)(s,t))})}function Pr(e,t,r){if(t&&(0,ee.isWorkletizableFunctionPath)(e)||r&&(0,ee.isWorkletizableObjectPath)(e))return e;if(e.isReferencedIdentifier()&&e.isIdentifier())return(0,Fr.findReferencedWorklet)(e,t,r)}});var Be=f(T=>{"use strict";var Te=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.processIfWorkletClass=void 0;var Mr=Te(require("@babel/generator")),qr=Te(require("@babel/traverse")),a=require("@babel/types"),te=require("assert"),Lr=S(),zr=P(),Tr=V(),Ne="__workletClass";function Nr(e,t){return!e.node.id||!Vr(e.node.body)?!1:(Jr(e.node.body),Ur(e,t),!0)}T.processIfWorkletClass=Nr;function Ur(e,t){(0,te.strict)(e.node.id);let r=e.node.id.name,n=Br(e.node,t);Xr(n),Gr(n.program.body),Hr(n.program.body,r),n.program.body.push((0,a.returnStatement)((0,a.identifier)(r)));let i=(0,a.functionExpression)(null,[],(0,a.blockStatement)([...n.program.body])),s=(0,a.callExpression)(i,[]);(0,zr.replaceWithFactoryCall)(e,r,s)}function Br(e,t){let r=(0,Mr.default)(e).code,n=(0,Tr.workletTransformSync)(r,{extraPlugins:["@babel/plugin-transform-class-properties","@babel/plugin-transform-classes","@babel/plugin-transform-unicode-regex"],filename:t.file.opts.filename,ast:!0,babelrc:!1,configFile:!1});return(0,te.strict)(n&&n.ast),n.ast}function Gr(e){e.forEach(t=>{if((0,a.isFunctionDeclaration)(t)){let r=(0,a.directive)((0,a.directiveLiteral)("worklet"));t.body.directives.push(r)}})}function Hr(e,t){let r=t+Lr.workletClassFactorySuffix,n=Zr(e,t),s=e[n].declarations[0].init,l=(0,a.functionDeclaration)((0,a.identifier)(r),[],(0,a.blockStatement)([(0,a.variableDeclaration)("const",[(0,a.variableDeclarator)((0,a.identifier)(t),s)]),(0,a.expressionStatement)((0,a.assignmentExpression)("=",(0,a.memberExpression)((0,a.identifier)(t),(0,a.identifier)(r)),(0,a.identifier)(r))),(0,a.returnStatement)((0,a.identifier)(t))],[(0,a.directive)((0,a.directiveLiteral)("worklet"))])),u=(0,a.variableDeclaration)("const",[(0,a.variableDeclarator)((0,a.identifier)(t),(0,a.callExpression)((0,a.identifier)(r),[]))]);e.splice(n,1,l,u)}function Zr(e,t){let r=e.findIndex(n=>(0,a.isVariableDeclaration)(n)&&n.declarations.some(i=>(0,a.isIdentifier)(i.id)&&i.id.name===t));return(0,te.strict)(r>=0),r}function Vr(e){return e.body.some(t=>(0,a.isClassProperty)(t)&&(0,a.isIdentifier)(t.key)&&t.key.name===Ne)}function Jr(e){e.body=e.body.filter(t=>!(0,a.isClassProperty)(t)||!(0,a.isIdentifier)(t.key)||t.key.name!==Ne)}function Xr(e){let t=$r(e),r=Yr(t),n=t.map(u=>u.index),i=r.map(u=>u.index),s=e.program.body,l=[...s];for(let u=0;u{r.get("body").forEach((i,s)=>{var l;let u=i.getBindingIdentifiers();if(!i.isFunctionDeclaration()||!(!((l=i.node.id)===null||l===void 0)&&l.name))return;let p={name:i.node.id.name,index:s,dependencies:new Set};t.push(p),i.traverse({Identifier(g){Kr(g,u,i)&&p.dependencies.add(g.node.name)}})})}}}),t}function Yr(e){let t=[],r=new Set;for(let n of e)Ue(n,e,t,r);return t}function Ue(e,t,r,n){if(n.has(e.name))throw new Error("Cycle detected. This should never happen.");if(!r.find(i=>i.name===e.name)){n.add(e.name);for(let i of e.dependencies)if(!r.find(s=>s.name===i)){let s=t.find(l=>l.name===i);(0,te.strict)(s),Ue(s,t,r,n)}r.push(e),n.delete(e.name)}}function Kr(e,t,r){return e.isReferencedIdentifier()&&!(e.node.name in t)&&!r.scope.hasOwnBinding(e.node.name)&&r.scope.hasReference(e.node.name)}});var ue=f(E=>{"use strict";Object.defineProperty(E,"__esModule",{value:!0});E.isContextObject=E.processIfWorkletContextObject=E.contextObjectMarker=void 0;var h=require("@babel/types");E.contextObjectMarker="__workletContextObject";function Qr(e,t){return Ge(e.node)?(tn(e.node),en(e.node),!0):!1}E.processIfWorkletContextObject=Qr;function Ge(e){return e.properties.some(t=>(0,h.isObjectProperty)(t)&&(0,h.isIdentifier)(t.key)&&t.key.name===E.contextObjectMarker)}E.isContextObject=Ge;function en(e){let t=(0,h.functionExpression)(null,[],(0,h.blockStatement)([(0,h.returnStatement)((0,h.cloneNode)(e))],[(0,h.directive)((0,h.directiveLiteral)("worklet"))]));e.properties.push((0,h.objectProperty)((0,h.identifier)(`${E.contextObjectMarker}Factory`),t))}function tn(e){e.properties=e.properties.filter(t=>!((0,h.isObjectProperty)(t)&&(0,h.isIdentifier)(t.key)&&t.key.name===E.contextObjectMarker))}});var Xe=f(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.isImplicitContextObject=N.processIfWorkletFile=void 0;var b=require("@babel/types"),He=S(),Ze=ue();function rn(e,t){return e.node.directives.some(r=>r.value.value==="worklet")?(e.node.directives=e.node.directives.filter(r=>r.value.value!=="worklet"),nn(e),!0):!1}N.processIfWorkletFile=rn;function nn(e){let t=e.get("body");fn(e.node),t.forEach(r=>{let n=on(r);de(n)})}function on(e){return e.isExportNamedDeclaration()||e.isExportDefaultDeclaration()?e.get("declaration"):e}function de(e){(0,He.isWorkletizableFunctionPath)(e)?(e.isArrowFunctionExpression()&&ln(e.node),Ve(e.node.body)):(0,He.isWorkletizableObjectPath)(e)?Je(e)?cn(e.node):an(e):e.isVariableDeclaration()?sn(e):e.isClassDeclaration()&&dn(e.node.body)}function sn(e){e.get("declarations").forEach(r=>{let n=r.get("init");n.isExpression()&&de(n)})}function an(e){e.get("properties").forEach(r=>{if(r.isObjectMethod())Ve(r.node.body);else if(r.isObjectProperty()){let n=r.get("value");de(n)}})}function ln(e){(0,b.isBlockStatement)(e.body)||(e.body=(0,b.blockStatement)([(0,b.returnStatement)(e.body)]))}function Ve(e){e.directives.some(t=>t.value.value==="worklet")||e.directives.push((0,b.directive)((0,b.directiveLiteral)("worklet")))}function cn(e){e.properties.some(t=>(0,b.isObjectProperty)(t)&&(0,b.isIdentifier)(t.key)&&t.key.name===Ze.contextObjectMarker)||e.properties.push((0,b.objectProperty)((0,b.identifier)(`${Ze.contextObjectMarker}`),(0,b.booleanLiteral)(!0)))}function Je(e){return e.get("properties").some(r=>r.isObjectMethod()?un(r):!1)}N.isImplicitContextObject=Je;function un(e){let t=!1;return e.traverse({ThisExpression(r){t=!0,r.stop()}}),t}function dn(e){e.body.push((0,b.classProperty)((0,b.identifier)("__workletClass"),(0,b.booleanLiteral)(!0)))}function fn(e){let t=e.body,r=t.length,n=0;for(;n{"use strict";Object.defineProperty(re,"__esModule",{value:!0});re.processInlineStylesWarning=void 0;var d=require("@babel/types"),bn=P(),fe=require("assert");function mn(e){return(0,d.callExpression)((0,d.arrowFunctionExpression)([],(0,d.blockStatement)([(0,d.expressionStatement)((0,d.callExpression)((0,d.memberExpression)((0,d.identifier)("console"),(0,d.identifier)("warn")),[(0,d.callExpression)((0,d.memberExpression)((0,d.callExpression)((0,d.identifier)("require"),[(0,d.stringLiteral)("react-native-reanimated")]),(0,d.identifier)("getUseOfValueInStyleWarning")),[])])),(0,d.returnStatement)(e.node)])),[])}function yn(e){e.isMemberExpression()&&(0,d.isIdentifier)(e.node.property)&&e.node.property.name==="value"&&e.replaceWith(mn(e))}function kn(e){if((0,d.isArrayExpression)(e.node)){let t=e.get("elements");(0,fe.strict)(Array.isArray(t),"[Reanimated] `elements` should be an array.");for(let r of t)r.isObjectExpression()&&pe(r)}}function pe(e){let t=e.get("properties");for(let r of t)if(r.isObjectProperty()){let n=r.get("value");(0,d.isIdentifier)(r.node.key)&&r.node.key.name==="transform"?kn(n):yn(n)}}function gn(e,t){if((0,bn.isRelease)()||t.opts.disableInlineStylesWarning||e.node.name.name!=="style"||!(0,d.isJSXExpressionContainer)(e.node.value))return;let r=e.get("value").get("expression");if((0,fe.strict)(!Array.isArray(r),"[Reanimated] `expression` should not be an array."),r.isArrayExpression()){let n=r.get("elements");(0,fe.strict)(Array.isArray(n),"[Reanimated] `elements` should be an array.");for(let i of n)i.isObjectExpression()&&pe(i)}else r.isObjectExpression()&&pe(r)}re.processInlineStylesWarning=gn});var Ke=f(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.substituteWebCallExpression=void 0;var Ye=require("@babel/types");function _n(e){let t=e.node.callee;if((0,Ye.isIdentifier)(t)){let r=t.name;(r==="isWeb"||r==="shouldBeUseWeb")&&e.replaceWith((0,Ye.booleanLiteral)(!0))}}ne.substituteWebCallExpression=_n});Object.defineProperty(exports,"__esModule",{value:!0});var Qe=ze(),On=Be(),vn=ue(),hn=Xe(),En=ae(),Sn=$e(),In=S(),xn=Ke(),wn=X();module.exports=function(){function e(t){try{t()}catch(r){throw new Error(`[Reanimated] Babel plugin exception: ${r}`)}}return{name:"reanimated",pre(){e(()=>{(0,En.initializeState)(this)})},visitor:{CallExpression:{enter(t,r){e(()=>{(0,Qe.processCalleesAutoworkletizableCallbacks)(t,r),r.opts.substituteWebPlatformChecks&&(0,xn.substituteWebCallExpression)(t)})}},[In.WorkletizableFunction]:{enter(t,r){e(()=>{(0,wn.processIfWithWorkletDirective)(t,r)||(0,Qe.processIfAutoworkletizableCallback)(t,r)})}},ObjectExpression:{enter(t,r){e(()=>{(0,vn.processIfWorkletContextObject)(t,r)})}},ClassDeclaration:{enter(t,r){e(()=>{(0,On.processIfWorkletClass)(t,r)})}},Program:{enter(t,r){e(()=>{(0,hn.processIfWorkletFile)(t,r)})}},JSXAttribute:{enter(t,r){e(()=>(0,Sn.processInlineStylesWarning)(t,r))}}}}}; //# sourceMappingURL=index.js.map diff --git a/packages/react-native-reanimated/plugin/src/class.ts b/packages/react-native-reanimated/plugin/src/class.ts index 25b97331cca..76e24117c2d 100644 --- a/packages/react-native-reanimated/plugin/src/class.ts +++ b/packages/react-native-reanimated/plugin/src/class.ts @@ -1,5 +1,4 @@ import type { NodePath } from '@babel/core'; -import { transformSync } from '@babel/core'; import generate from '@babel/generator'; import traverse from '@babel/traverse'; import type { @@ -36,6 +35,7 @@ import { strict as assert } from 'assert'; import type { ReanimatedPluginPass } from './types'; import { workletClassFactorySuffix } from './types'; import { replaceWithFactoryCall } from './utils'; +import { workletTransformSync } from './transform'; const classWorkletMarker = '__workletClass'; @@ -96,8 +96,8 @@ function getPolyfilledAst( ) { const classCode = generate(classNode).code; - const classWithPolyfills = transformSync(classCode, { - plugins: [ + const classWithPolyfills = workletTransformSync(classCode, { + extraPlugins: [ '@babel/plugin-transform-class-properties', '@babel/plugin-transform-classes', '@babel/plugin-transform-unicode-regex', diff --git a/packages/react-native-reanimated/plugin/src/transform.ts b/packages/react-native-reanimated/plugin/src/transform.ts new file mode 100644 index 00000000000..44cbfa4f0ea --- /dev/null +++ b/packages/react-native-reanimated/plugin/src/transform.ts @@ -0,0 +1,28 @@ +import { transformSync } from '@babel/core'; +import type { PluginItem, TransformOptions } from '@babel/core'; + +export function workletTransformSync( + code: string, + opts: WorkletTransformOptions +) { + const { extraPlugins = [], extraPresets = [], ...rest } = opts; + + return transformSync(code, { + ...rest, + plugins: [...defaultPlugins, ...extraPlugins], + presets: [...defaultPresets, ...extraPresets], + }); +} + +const defaultPresets: PluginItem[] = [ + require.resolve('@babel/preset-typescript'), +]; + +const defaultPlugins: PluginItem[] = []; + +interface WorkletTransformOptions + extends Omit { + extraPlugins?: PluginItem[]; + extraPresets?: PluginItem[]; + filename: TransformOptions['filename']; +} diff --git a/packages/react-native-reanimated/plugin/src/workletFactory.ts b/packages/react-native-reanimated/plugin/src/workletFactory.ts index d8652e446da..8a3dfe9f2e9 100644 --- a/packages/react-native-reanimated/plugin/src/workletFactory.ts +++ b/packages/react-native-reanimated/plugin/src/workletFactory.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-var-requires */ import type { NodePath } from '@babel/core'; -import { transformSync, traverse } from '@babel/core'; +import { traverse } from '@babel/core'; import generate from '@babel/generator'; import type { File as BabelFile, @@ -44,25 +44,11 @@ import type { ReanimatedPluginPass, WorkletizableFunction } from './types'; import { workletClassFactorySuffix } from './types'; import { isRelease } from './utils'; import { buildWorkletString } from './workletStringCode'; +import { workletTransformSync } from './transform'; const REAL_VERSION = require('../../package.json').version; const MOCK_VERSION = 'x.y.z'; -const workletStringTransformPresets = [ - require.resolve('@babel/preset-typescript'), -]; - -const workletStringTransformPlugins = [ - require.resolve('@babel/plugin-transform-shorthand-properties'), - require.resolve('@babel/plugin-transform-arrow-functions'), - require.resolve('@babel/plugin-transform-optional-chaining'), - require.resolve('@babel/plugin-transform-nullish-coalescing-operator'), - [ - require.resolve('@babel/plugin-transform-template-literals'), - { loose: true }, - ], -]; - export function makeWorkletFactory( fun: NodePath, state: ReanimatedPluginPass @@ -91,10 +77,9 @@ export function makeWorkletFactory( codeObject.code = '(' + (fun.isObjectMethod() ? 'function ' : '') + codeObject.code + '\n)'; - const transformed = transformSync(codeObject.code, { + const transformed = workletTransformSync(codeObject.code, { + extraPlugins, filename: state.file.opts.filename, - presets: workletStringTransformPresets, - plugins: workletStringTransformPlugins, ast: true, babelrc: false, configFile: false, @@ -469,3 +454,14 @@ function makeArrayFromCapturedBindings( return Array.from(closure.values()); } + +const extraPlugins = [ + require.resolve('@babel/plugin-transform-shorthand-properties'), + require.resolve('@babel/plugin-transform-arrow-functions'), + require.resolve('@babel/plugin-transform-optional-chaining'), + require.resolve('@babel/plugin-transform-nullish-coalescing-operator'), + [ + require.resolve('@babel/plugin-transform-template-literals'), + { loose: true }, + ], +]; diff --git a/packages/react-native-reanimated/plugin/src/workletStringCode.ts b/packages/react-native-reanimated/plugin/src/workletStringCode.ts index 113ee52f133..f1b7e108c83 100644 --- a/packages/react-native-reanimated/plugin/src/workletStringCode.ts +++ b/packages/react-native-reanimated/plugin/src/workletStringCode.ts @@ -1,5 +1,5 @@ import type { BabelFileResult, NodePath, PluginItem } from '@babel/core'; -import { transformSync, traverse } from '@babel/core'; +import { traverse } from '@babel/core'; import generate from '@babel/generator'; import type { File as BabelFile, @@ -34,6 +34,7 @@ import * as fs from 'fs'; import type { ReanimatedPluginPass, WorkletizableFunction } from './types'; import { workletClassFactorySuffix } from './types'; import { isRelease } from './utils'; +import { workletTransformSync } from './transform'; const MOCK_SOURCE_MAP = 'mock source map'; @@ -130,8 +131,9 @@ export function buildWorkletString( } } - const transformed = transformSync(code, { - plugins: [prependClosureVariablesIfNecessary(closureVariables)], + const transformed = workletTransformSync(code, { + filename: state.file.opts.filename, + extraPlugins: [getClosurePlugin(closureVariables)], compact: true, sourceMaps: includeSourceMap, inputSourceMap: inputMap, @@ -222,9 +224,8 @@ function prependRecursiveDeclaration(path: NodePath) { } } -function prependClosureVariablesIfNecessary( - closureVariables: Array -): PluginItem { +/** Prepends necessary closure variables to the worklet function. */ +function getClosurePlugin(closureVariables: Array): PluginItem { const closureDeclaration = variableDeclaration('const', [ variableDeclarator( objectPattern(