diff --git a/__tests__/__snapshots__/plugin.test.js.snap b/__tests__/__snapshots__/plugin.test.js.snap index 5b4b699fde9..7c0d59822b1 100644 --- a/__tests__/__snapshots__/plugin.test.js.snap +++ b/__tests__/__snapshots__/plugin.test.js.snap @@ -586,86 +586,6 @@ var foo = function () { }();" `; -exports[`babel plugin workletizes object hook wrapped ArrowFunctionExpression automatically 1`] = ` -"var _worklet_1022605193782_init_data = { - code: \\"function anonymous(event){console.log(event);}\\", - location: \\"${ process.cwd() }/jest tests fixture\\" -}; -useAnimatedGestureHandler({ - onStart: function () { - var _e = [new global.Error(), 1, -27]; - var _f = function _f(event) { - console.log(event); - }; - _f._closure = {}; - _f.__initData = _worklet_1022605193782_init_data; - _f.__workletHash = 1022605193782; - _f.__stackDetails = _e; - return _f; - }() -});" -`; - -exports[`babel plugin workletizes object hook wrapped ObjectMethod automatically 1`] = ` -"var _worklet_338158776260_init_data = { - code: \\"function onStart(event){console.log(event);}\\", - location: \\"${ process.cwd() }/jest tests fixture\\" -}; -useAnimatedGestureHandler({ - onStart: function () { - var _e = [new global.Error(), 1, -27]; - var _f = function _f(event) { - console.log(event); - }; - _f._closure = {}; - _f.__initData = _worklet_338158776260_init_data; - _f.__workletHash = 338158776260; - _f.__stackDetails = _e; - return _f; - }() -});" -`; - -exports[`babel plugin workletizes object hook wrapped named FunctionExpression automatically 1`] = ` -"var _worklet_338158776260_init_data = { - code: \\"function onStart(event){console.log(event);}\\", - location: \\"${ process.cwd() }/jest tests fixture\\" -}; -useAnimatedGestureHandler({ - onStart: function () { - var _e = [new global.Error(), 1, -27]; - var _f = function _f(event) { - console.log(event); - }; - _f._closure = {}; - _f.__initData = _worklet_338158776260_init_data; - _f.__workletHash = 338158776260; - _f.__stackDetails = _e; - return _f; - }() -});" -`; - -exports[`babel plugin workletizes object hook wrapped unnamed FunctionExpression automatically 1`] = ` -"var _worklet_1022605193782_init_data = { - code: \\"function anonymous(event){console.log(event);}\\", - location: \\"${ process.cwd() }/jest tests fixture\\" -}; -useAnimatedGestureHandler({ - onStart: function () { - var _e = [new global.Error(), 1, -27]; - var _f = function _f(event) { - console.log(event); - }; - _f._closure = {}; - _f.__initData = _worklet_1022605193782_init_data; - _f.__workletHash = 1022605193782; - _f.__stackDetails = _e; - return _f; - }() -});" -`; - exports[`babel plugin workletizes possibly chained gesture object callback functions automatically 1`] = ` "var _reactNativeGestureHandler = require(\\"react-native-gesture-handler\\"); var _worklet_15393478329680_init_data = { @@ -760,3 +680,163 @@ var foo = function () { return _f; }();" `; + +exports[`babel plugin workletizes useAnimatedGestureHandler wrapped ArrowFunctionExpression automatically 1`] = ` +"var _worklet_1022605193782_init_data = { + code: \\"function anonymous(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedGestureHandler({ + onStart: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_1022605193782_init_data; + _f.__workletHash = 1022605193782; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedGestureHandler wrapped ObjectMethod automatically 1`] = ` +"var _worklet_338158776260_init_data = { + code: \\"function onStart(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedGestureHandler({ + onStart: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_338158776260_init_data; + _f.__workletHash = 338158776260; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedGestureHandler wrapped named FunctionExpression automatically 1`] = ` +"var _worklet_338158776260_init_data = { + code: \\"function onStart(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedGestureHandler({ + onStart: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_338158776260_init_data; + _f.__workletHash = 338158776260; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedGestureHandler wrapped unnamed FunctionExpression automatically 1`] = ` +"var _worklet_1022605193782_init_data = { + code: \\"function anonymous(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedGestureHandler({ + onStart: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_1022605193782_init_data; + _f.__workletHash = 1022605193782; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedScrollHandler wrapped ArrowFunctionExpression automatically 1`] = ` +"var _worklet_1022605193782_init_data = { + code: \\"function anonymous(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedScrollHandler({ + onScroll: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_1022605193782_init_data; + _f.__workletHash = 1022605193782; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedScrollHandler wrapped ObjectMethod automatically 1`] = ` +"var _worklet_947458829673_init_data = { + code: \\"function onScroll(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedGestureHandler({ + onScroll: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_947458829673_init_data; + _f.__workletHash = 947458829673; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedScrollHandler wrapped named FunctionExpression automatically 1`] = ` +"var _worklet_947458829673_init_data = { + code: \\"function onScroll(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedScrollHandler({ + onScroll: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_947458829673_init_data; + _f.__workletHash = 947458829673; + _f.__stackDetails = _e; + return _f; + }() +});" +`; + +exports[`babel plugin workletizes useAnimatedScrollHandler wrapped unnamed FunctionExpression automatically 1`] = ` +"var _worklet_1022605193782_init_data = { + code: \\"function anonymous(event){console.log(event);}\\", + location: \\"${ process.cwd() }/jest tests fixture\\" +}; +useAnimatedScrollHandler({ + onScroll: function () { + var _e = [new global.Error(), 1, -27]; + var _f = function _f(event) { + console.log(event); + }; + _f._closure = {}; + _f.__initData = _worklet_1022605193782_init_data; + _f.__workletHash = 1022605193782; + _f.__stackDetails = _e; + return _f; + }() +});" +`; diff --git a/__tests__/plugin.test.js b/__tests__/plugin.test.js index 009c05c3435..928d7d81811 100644 --- a/__tests__/plugin.test.js +++ b/__tests__/plugin.test.js @@ -370,7 +370,7 @@ describe('babel plugin', () => { // object hooks - it('workletizes object hook wrapped ArrowFunctionExpression automatically', () => { + it('workletizes useAnimatedGestureHandler wrapped ArrowFunctionExpression automatically', () => { const input = ` useAnimatedGestureHandler({ onStart: (event) => { @@ -384,7 +384,21 @@ describe('babel plugin', () => { expect(code).toMatchSnapshot(); }); - it('workletizes object hook wrapped unnamed FunctionExpression automatically', () => { + it('workletizes useAnimatedScrollHandler wrapped ArrowFunctionExpression automatically', () => { + const input = ` + useAnimatedScrollHandler({ + onScroll: (event) => { + console.log(event); + }, + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + expect(code).toMatchSnapshot(); + }); + + it('workletizes useAnimatedGestureHandler wrapped unnamed FunctionExpression automatically', () => { const input = ` useAnimatedGestureHandler({ onStart: function (event) { @@ -398,7 +412,21 @@ describe('babel plugin', () => { expect(code).toMatchSnapshot(); }); - it('workletizes object hook wrapped named FunctionExpression automatically', () => { + it('workletizes useAnimatedScrollHandler wrapped unnamed FunctionExpression automatically', () => { + const input = ` + useAnimatedScrollHandler({ + onScroll: function (event) { + console.log(event); + }, + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + expect(code).toMatchSnapshot(); + }); + + it('workletizes useAnimatedGestureHandler wrapped named FunctionExpression automatically', () => { const input = ` useAnimatedGestureHandler({ onStart: function onStart(event) { @@ -412,7 +440,21 @@ describe('babel plugin', () => { expect(code).toMatchSnapshot(); }); - it('workletizes object hook wrapped ObjectMethod automatically', () => { + it('workletizes useAnimatedScrollHandler wrapped named FunctionExpression automatically', () => { + const input = ` + useAnimatedScrollHandler({ + onScroll: function onScroll(event) { + console.log(event); + }, + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + expect(code).toMatchSnapshot(); + }); + + it('workletizes useAnimatedGestureHandler wrapped ObjectMethod automatically', () => { const input = ` useAnimatedGestureHandler({ onStart(event) { @@ -426,15 +468,39 @@ describe('babel plugin', () => { expect(code).toMatchSnapshot(); }); - it('supports empty object in hooks', () => { + it('workletizes useAnimatedScrollHandler wrapped ObjectMethod automatically', () => { + const input = ` + useAnimatedGestureHandler({ + onScroll(event) { + console.log(event); + }, + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + expect(code).toMatchSnapshot(); + }); + + it('supports empty object in useAnimatedGestureHandler', () => { const input = ` useAnimatedGestureHandler({}); `; - runPlugin(input); + const { code } = runPlugin(input); + expect(code).not.toContain('_f.__workletHash'); + }); + + it('supports empty object in useAnimatedScrollHandler', () => { + const input = ` + useAnimatedScrollHandler({}); + `; + + const { code } = runPlugin(input); + expect(code).not.toContain('_f.__workletHash'); }); - it('transforms each object property in hooks', () => { + it('transforms each object property in useAnimatedGestureHandler', () => { const input = ` useAnimatedGestureHandler({ onStart: () => {}, @@ -447,6 +513,81 @@ describe('babel plugin', () => { expect(code).toMatch(/^(.*)(_f\.__workletHash(.*)){3}$/s); }); + it('transforms each object property in useAnimatedScrollHandler', () => { + const input = ` + useAnimatedScrollHandler({ + onScroll: () => {}, + onBeginDrag: () => {}, + onEndDrag: () => {}, + onMomentumBegin: () => {}, + onMomentumEnd: () => {}, + }); + `; + + const { code } = runPlugin(input); + expect(code).toMatch(/^(.*)(_f\.__workletHash(.*)){5}$/s); + }); + + it("doesn't transform ArrowFunctionExpression as argument of useAnimatedGestureHandler", () => { + const input = ` + useAnimatedGestureHandler(() => {}); + `; + + const { code } = runPlugin(input); + expect(code).not.toContain('_f.__workletHash'); + }); + + it("doesn't transform unnamed FunctionExpression as argument of useAnimatedGestureHandler", () => { + const input = ` + useAnimatedGestureHandler(function () {}); + `; + + const { code } = runPlugin(input); + expect(code).not.toContain('_f.__workletHash'); + }); + + it("doesn't transform named FunctionExpression as argument of useAnimatedGestureHandler", () => { + const input = ` + useAnimatedGestureHandler(function foo() {}); + `; + + const { code } = runPlugin(input); + expect(code).not.toContain('_f.__workletHash'); + }); + + it('transforms ArrowFunctionExpression as argument of useAnimatedScrollHandler', () => { + const input = ` + useAnimatedScrollHandler((event) => { + console.log(event); + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + }); + + it('transforms unnamed FunctionExpression as argument of useAnimatedScrollHandler', () => { + const input = ` + useAnimatedScrollHandler(function (event) { + console.log(event); + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + }); + + it('transforms named FunctionExpression as argument of useAnimatedScrollHandler', () => { + const input = ` + useAnimatedScrollHandler(function foo(event) { + console.log(event); + }); + `; + + const { code } = runPlugin(input); + expect(code).toContain('_f.__workletHash'); + }); + // React Native Gesture Handler it('workletizes possibly chained gesture object callback functions automatically', () => { diff --git a/plugin/build/plugin.js b/plugin/build/plugin.js index 77b12de50a0..0c62ffe4399 100644 --- a/plugin/build/plugin.js +++ b/plugin/build/plugin.js @@ -459,6 +459,8 @@ var require_processForCalleesWorklets = __commonJS({ (0, assert_1.strict)(!Array.isArray(workletToProcess), "'workletToProcess' is an array'"); if (workletToProcess.isObjectExpression()) { processObjectHook(workletToProcess, state); + } else if (name === "useAnimatedScrollHandler") { + (0, processIfWorkletFunction_1.processIfWorkletFunction)(workletToProcess, state); } } else { const indices = functionArgsToWorkletize.get(name); diff --git a/plugin/build/plugin.js.map b/plugin/build/plugin.js.map index 7a279e13f85..fac1770deb4 100644 --- a/plugin/build/plugin.js.map +++ b/plugin/build/plugin.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/commonObjects.ts", "../src/utils.ts", "../src/buildWorkletString.ts", "../src/makeWorklet.ts", "../src/processWorkletObjectMethod.ts", "../src/processIfWorkletFunction.ts", "../src/processForCalleesWorklets.ts", "../src/processIfWorkletNode.ts", "../src/processIfGestureHandlerEventCallbackFunctionNode.ts", "../src/processInlineStylesWarning.ts", "../src/injectVersion.ts", "../src/plugin.ts"], - "sourcesContent": ["export const globals = new Set([\n 'this',\n 'console',\n 'performance',\n 'Date',\n 'Array',\n 'ArrayBuffer',\n 'Int8Array',\n 'Int16Array',\n 'Int32Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Uint16Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'HermesInternal',\n 'JSON',\n 'Math',\n 'Number',\n 'Object',\n 'String',\n 'Symbol',\n 'undefined',\n 'null',\n 'UIManager',\n 'requestAnimationFrame',\n 'setImmediate',\n 'queueMicrotask',\n '_WORKLET',\n 'arguments',\n 'Boolean',\n 'parseInt',\n 'parseFloat',\n 'Map',\n 'WeakMap',\n 'WeakRef',\n 'Set',\n '_log',\n '_scheduleOnJS',\n '_makeShareableClone',\n '_updateDataSynchronously',\n 'eval',\n '_updatePropsPaper',\n '_updatePropsFabric',\n '_removeShadowNodeFromRegistry',\n 'RegExp',\n 'Error',\n 'ErrorUtils',\n 'global',\n '_measure',\n '_scrollTo',\n '_dispatchCommand',\n '_setGestureState',\n '_getCurrentTime',\n 'isNaN',\n 'LayoutAnimationRepository',\n '_notifyAboutProgress',\n '_notifyAboutEnd',\n]);\n", "export function isRelease() {\n return (\n process.env.BABEL_ENV &&\n ['production', 'release'].includes(process.env.BABEL_ENV)\n );\n}\n", "import {\n BabelFileResult,\n NodePath,\n transformSync,\n PluginItem,\n} from '@babel/core';\nimport generate from '@babel/generator';\nimport {\n ObjectMethod,\n isObjectMethod,\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n identifier,\n Identifier,\n objectProperty,\n isArrowFunctionExpression,\n variableDeclaration,\n variableDeclarator,\n isBlockStatement,\n functionExpression,\n isFunctionDeclaration,\n VariableDeclaration,\n ExpressionStatement,\n isProgram,\n memberExpression,\n File as BabelFile,\n objectPattern,\n thisExpression,\n isExpression,\n isExpressionStatement,\n} from '@babel/types';\nimport * as fs from 'fs';\nimport * as convertSourceMap from 'convert-source-map';\nimport { strict as assert } from 'assert';\nimport { isRelease } from './utils';\n\nexport function buildWorkletString(\n fun: BabelFile,\n closureVariables: Array,\n name: string,\n inputMap: BabelFileResult['map']\n): Array {\n const draftExpression = (fun.program.body.find((obj) =>\n isFunctionDeclaration(obj)\n ) ||\n fun.program.body.find((obj) => isExpressionStatement(obj)) ||\n undefined) as FunctionDeclaration | ExpressionStatement | undefined;\n\n assert(draftExpression, \"'draftExpression' is undefined\");\n\n const expression = isFunctionDeclaration(draftExpression)\n ? draftExpression\n : draftExpression.expression;\n\n assert(\n 'params' in expression,\n \"'params' property is undefined in 'expression'\"\n );\n assert(\n isBlockStatement(expression.body),\n \"'expression.body' is not a 'BlockStatement'\"\n );\n\n const workletFunction = functionExpression(\n identifier(name),\n expression.params,\n expression.body\n );\n\n const code = generate(workletFunction).code;\n\n assert(inputMap, \"'inputMap' is undefined\");\n\n const includeSourceMap = shouldGenerateSourceMap();\n\n if (includeSourceMap) {\n // Clear contents array (should be empty anyways)\n inputMap.sourcesContent = [];\n // Include source contents in source map, because Flipper/iframe is not\n // allowed to read files from disk.\n for (const sourceFile of inputMap.sources) {\n inputMap.sourcesContent.push(\n fs.readFileSync(sourceFile).toString('utf-8')\n );\n }\n }\n\n const transformed = transformSync(code, {\n plugins: [prependClosureVariablesIfNecessary(closureVariables)],\n compact: !includeSourceMap,\n sourceMaps: includeSourceMap,\n inputSourceMap: inputMap,\n ast: false,\n babelrc: false,\n configFile: false,\n comments: false,\n });\n\n assert(transformed, \"'transformed' is null\");\n\n let sourceMap;\n if (includeSourceMap) {\n sourceMap = convertSourceMap.fromObject(transformed.map).toObject();\n // sourcesContent field contains a full source code of the file which contains the worklet\n // and is not needed by the source map interpreter in order to symbolicate a stack trace.\n // Therefore, we remove it to reduce the bandwith and avoid sending it potentially multiple times\n // in files that contain multiple worklets. Along with sourcesContent.\n delete sourceMap.sourcesContent;\n }\n\n return [transformed.code, JSON.stringify(sourceMap)];\n}\n\nfunction shouldGenerateSourceMap() {\n if (isRelease()) {\n return false;\n }\n\n if (process.env.REANIMATED_PLUGIN_TESTS === 'jest') {\n // We want to detect this, so we can disable source maps (because they break\n // snapshot tests with jest).\n return false;\n }\n\n return true;\n}\n\nfunction prependClosure(\n path: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression\n | ObjectMethod\n >,\n closureVariables: Array,\n closureDeclaration: VariableDeclaration\n) {\n if (closureVariables.length === 0 || !isProgram(path.parent)) {\n return;\n }\n\n if (!isExpression(path.node.body)) {\n path.node.body.body.unshift(closureDeclaration);\n }\n}\n\nfunction prependRecursiveDeclaration(\n path: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression\n | ObjectMethod\n >\n) {\n if (\n isProgram(path.parent) &&\n !isArrowFunctionExpression(path.node) &&\n !isObjectMethod(path.node) &&\n path.node.id &&\n path.scope.parent\n ) {\n const hasRecursiveCalls =\n path.scope.parent.bindings[path.node.id.name]?.references > 0;\n if (hasRecursiveCalls) {\n path.node.body.body.unshift(\n variableDeclaration('const', [\n variableDeclarator(\n identifier(path.node.id.name),\n memberExpression(thisExpression(), identifier('_recur'))\n ),\n ])\n );\n }\n }\n}\n\nfunction prependClosureVariablesIfNecessary(\n closureVariables: Array\n): PluginItem {\n const closureDeclaration = variableDeclaration('const', [\n variableDeclarator(\n objectPattern(\n closureVariables.map((variable) =>\n objectProperty(\n identifier(variable.name),\n identifier(variable.name),\n false,\n true\n )\n )\n ),\n memberExpression(thisExpression(), identifier('_closure'))\n ),\n ]);\n\n return {\n visitor: {\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod':\n (\n path: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression\n | ObjectMethod\n >\n ) => {\n prependClosure(path, closureVariables, closureDeclaration);\n prependRecursiveDeclaration(path);\n },\n },\n };\n}\n", "import { NodePath, transformSync, traverse } from '@babel/core';\nimport generate from '@babel/generator';\nimport {\n ObjectMethod,\n isObjectMethod,\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n identifier,\n Identifier,\n objectProperty,\n variableDeclaration,\n variableDeclarator,\n cloneNode,\n isBlockStatement,\n functionExpression,\n objectExpression,\n stringLiteral,\n isFunctionDeclaration,\n VariableDeclaration,\n ExpressionStatement,\n ReturnStatement,\n isProgram,\n isObjectProperty,\n isMemberExpression,\n isObjectExpression,\n expressionStatement,\n assignmentExpression,\n memberExpression,\n numericLiteral,\n arrayExpression,\n newExpression,\n returnStatement,\n blockStatement,\n isFunctionExpression,\n isIdentifier,\n File as BabelFile,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { isRelease } from './utils';\nimport { strict as assert } from 'assert';\nimport { globals } from './commonObjects';\nimport { relative } from 'path';\nimport { buildWorkletString } from './buildWorkletString';\n\nexport function makeWorklet(\n fun: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ObjectMethod\n | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n): FunctionExpression {\n // Returns a new FunctionExpression which is a workletized version of provided\n // FunctionDeclaration, FunctionExpression, ArrowFunctionExpression or ObjectMethod.\n\n const functionName = makeWorkletName(fun);\n\n // remove 'worklet'; directive before generating string\n fun.traverse({\n DirectiveLiteral(path) {\n if (path.node.value === 'worklet' && path.getFunctionParent() === fun) {\n path.parentPath.remove();\n }\n },\n });\n\n // We use copy because some of the plugins don't update bindings and\n // some even break them\n assert(state.file.opts.filename, \"'state.file.opts.filename' is undefined\");\n\n const codeObject = generate(fun.node, {\n sourceMaps: true,\n sourceFileName: state.file.opts.filename,\n });\n\n // We need to add a newline at the end, because there could potentially be a\n // comment after the function that gets included here, and then the closing\n // bracket would become part of the comment thus resulting in an error, since\n // there is a missing closing bracket.\n codeObject.code =\n '(' + (isObjectMethod(fun) ? 'function ' : '') + codeObject.code + '\\n)';\n\n const transformed = transformSync(codeObject.code, {\n filename: state.file.opts.filename,\n presets: ['@babel/preset-typescript'],\n plugins: [\n '@babel/plugin-transform-shorthand-properties',\n '@babel/plugin-transform-arrow-functions',\n '@babel/plugin-proposal-optional-chaining',\n '@babel/plugin-proposal-nullish-coalescing-operator',\n ['@babel/plugin-transform-template-literals', { loose: true }],\n ],\n ast: true,\n babelrc: false,\n configFile: false,\n inputSourceMap: codeObject.map,\n });\n\n assert(transformed, \"'transformed' is undefined\");\n assert(transformed.ast, \"'transformed.ast' is undefined\");\n\n const variables = makeArrayFromCapturedBindings(transformed.ast, fun);\n\n const privateFunctionId = identifier('_f');\n const clone = cloneNode(fun.node);\n const funExpression = isBlockStatement(clone.body)\n ? functionExpression(null, clone.params, clone.body)\n : clone;\n\n const [funString, sourceMapString] = buildWorkletString(\n transformed.ast,\n variables,\n functionName,\n transformed.map\n );\n assert(funString, \"'funString' is undefined\");\n const workletHash = hash(funString);\n\n let location = state.file.opts.filename;\n if (state.opts.relativeSourceLocation) {\n location = relative(state.cwd, location);\n }\n\n let lineOffset = 1;\n if (variables.length > 0) {\n // When worklet captures some variables, we append closure destructing at\n // the beginning of the function body. This effectively results in line\n // numbers shifting by the number of captured variables (size of the\n // closure) + 2 (for the opening and closing brackets of the destruct\n // statement)\n lineOffset -= variables.length + 2;\n }\n\n const pathForStringDefinitions = fun.parentPath.isProgram()\n ? fun\n : fun.findParent((path) => isProgram(path.parentPath));\n assert(pathForStringDefinitions, \"'pathForStringDefinitions' is null\");\n assert(\n pathForStringDefinitions.parentPath,\n \"'pathForStringDefinitions.parentPath' is null\"\n );\n\n const initDataId =\n pathForStringDefinitions.parentPath.scope.generateUidIdentifier(\n `worklet_${workletHash}_init_data`\n );\n\n const initDataObjectExpression = objectExpression([\n objectProperty(identifier('code'), stringLiteral(funString)),\n objectProperty(identifier('location'), stringLiteral(location)),\n ]);\n\n if (sourceMapString) {\n initDataObjectExpression.properties.push(\n objectProperty(identifier('sourceMap'), stringLiteral(sourceMapString))\n );\n }\n\n pathForStringDefinitions.insertBefore(\n variableDeclaration('const', [\n variableDeclarator(initDataId, initDataObjectExpression),\n ])\n );\n\n assert(\n !isFunctionDeclaration(funExpression),\n \"'funExpression' is a 'FunctionDeclaration'\"\n );\n assert(\n !isObjectMethod(funExpression),\n \"'funExpression' is an 'ObjectMethod'\"\n );\n\n const statements: Array<\n VariableDeclaration | ExpressionStatement | ReturnStatement\n > = [\n variableDeclaration('const', [\n variableDeclarator(privateFunctionId, funExpression),\n ]),\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(privateFunctionId, identifier('_closure'), false),\n objectExpression(\n variables.map((variable) =>\n objectProperty(identifier(variable.name), variable, false, true)\n )\n )\n )\n ),\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(privateFunctionId, identifier('__initData'), false),\n initDataId\n )\n ),\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(privateFunctionId, identifier('__workletHash'), false),\n numericLiteral(workletHash)\n )\n ),\n ];\n\n if (!isRelease()) {\n statements.unshift(\n variableDeclaration('const', [\n variableDeclarator(\n identifier('_e'),\n arrayExpression([\n newExpression(\n memberExpression(identifier('global'), identifier('Error')),\n []\n ),\n numericLiteral(lineOffset),\n numericLiteral(-27), // the placement of opening bracket after Exception in line that defined '_e' variable\n ])\n ),\n ])\n );\n statements.push(\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(\n privateFunctionId,\n identifier('__stackDetails'),\n false\n ),\n identifier('_e')\n )\n )\n );\n }\n\n statements.push(returnStatement(privateFunctionId));\n\n const newFun = functionExpression(undefined, [], blockStatement(statements));\n\n return newFun;\n}\n\nfunction hash(str: string) {\n let i = str.length;\n let hash1 = 5381;\n let hash2 = 52711;\n\n while (i--) {\n const char = str.charCodeAt(i);\n // eslint-disable-next-line no-bitwise\n hash1 = (hash1 * 33) ^ char;\n // eslint-disable-next-line no-bitwise\n hash2 = (hash2 * 33) ^ char;\n }\n\n // eslint-disable-next-line no-bitwise\n return (hash1 >>> 0) * 4096 + (hash2 >>> 0);\n}\n\nfunction makeWorkletName(\n fun: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ObjectMethod\n | ArrowFunctionExpression\n >\n) {\n if (isObjectMethod(fun.node) && 'name' in fun.node.key) {\n return fun.node.key.name;\n }\n if (isFunctionDeclaration(fun.node) && fun.node.id) {\n return fun.node.id.name;\n }\n if (isFunctionExpression(fun.node) && isIdentifier(fun.node.id)) {\n return fun.node.id.name;\n }\n return 'anonymous'; // fallback for ArrowFunctionExpression and unnamed FunctionExpression\n}\n\nfunction makeArrayFromCapturedBindings(\n ast: BabelFile,\n fun: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ObjectMethod\n | ArrowFunctionExpression\n >\n) {\n const closure = new Map();\n\n // this traversal looks for variables to capture\n traverse(ast, {\n Identifier(path) {\n // we only capture variables that were declared outside of the scope\n if (!path.isReferencedIdentifier()) {\n return;\n }\n const name = path.node.name;\n // if the function is named and was added to globals we don't want to add it to closure\n // hence we check if identifier has that name\n if (globals.has(name)) {\n return;\n }\n if (\n 'id' in fun.node &&\n fun.node.id &&\n fun.node.id.name === name // we don't want to capture function's own name\n ) {\n return;\n }\n\n const parentNode = path.parent;\n\n if (\n isMemberExpression(parentNode) &&\n parentNode.property === path.node &&\n !parentNode.computed\n ) {\n return;\n }\n\n if (\n isObjectProperty(parentNode) &&\n isObjectExpression(path.parentPath.parent) &&\n path.node !== parentNode.value\n ) {\n return;\n }\n\n let currentScope = path.scope;\n\n while (currentScope != null) {\n if (currentScope.bindings[name] != null) {\n return;\n }\n currentScope = currentScope.parent;\n }\n closure.set(name, path.node);\n },\n });\n\n return Array.from(closure.values());\n}\n", "import { NodePath } from '@babel/core';\nimport {\n ObjectMethod,\n identifier,\n isIdentifier,\n isFunctionParent,\n objectProperty,\n callExpression,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { makeWorklet } from './makeWorklet';\n\nexport function processWorkletObjectMethod(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n // Replaces ObjectMethod with a workletized version of itself.\n\n if (!isFunctionParent(path)) {\n return;\n }\n\n const newFun = makeWorklet(path, state);\n\n const replacement = objectProperty(\n identifier(isIdentifier(path.node.key) ? path.node.key.name : ''),\n callExpression(newFun, [])\n );\n\n path.replaceWith(replacement);\n}\n", "import { NodePath, Node } from '@babel/core';\nimport {\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n callExpression,\n isScopable,\n isExportNamedDeclaration,\n variableDeclaration,\n variableDeclarator,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { makeWorklet } from './makeWorklet';\n\n// Replaces FunctionDeclaration, FunctionExpression or ArrowFunctionExpression\n// with a workletized version of itself.\n\nexport function processIfWorkletFunction(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n if (\n path.isFunctionDeclaration() ||\n path.isFunctionExpression() ||\n path.isArrowFunctionExpression()\n ) {\n processWorkletFunction(path, state);\n }\n}\n\nfunction processWorkletFunction(\n path: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n) {\n const newFun = makeWorklet(path, state);\n\n const replacement = callExpression(newFun, []);\n\n // we check if function needs to be assigned to variable declaration.\n // This is needed if function definition directly in a scope. Some other ways\n // where function definition can be used is for example with variable declaration:\n // const ggg = function foo() { }\n // ^ in such a case we don't need to define variable for the function\n const needDeclaration =\n isScopable(path.parent) || isExportNamedDeclaration(path.parent);\n path.replaceWith(\n 'id' in path.node && path.node.id && needDeclaration\n ? variableDeclaration('const', [\n variableDeclarator(path.node.id, replacement),\n ])\n : replacement\n );\n}\n", "import { NodePath } from '@babel/core';\nimport {\n CallExpression,\n isSequenceExpression,\n ObjectExpression,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { processWorkletObjectMethod } from './processWorkletObjectMethod';\nimport { processIfWorkletFunction } from './processIfWorkletFunction';\nimport { strict as assert } from 'assert';\n\nconst functionArgsToWorkletize = new Map([\n ['useFrameCallback', [0]],\n ['useAnimatedStyle', [0]],\n ['useAnimatedProps', [0]],\n ['createAnimatedPropAdapter', [0]],\n ['useDerivedValue', [0]],\n ['useAnimatedScrollHandler', [0]],\n ['useAnimatedReaction', [0, 1]],\n ['useWorkletCallback', [0]],\n // animations' callbacks\n ['withTiming', [2]],\n ['withSpring', [2]],\n ['withDecay', [1]],\n ['withRepeat', [3]],\n]);\n\nconst objectHooks = new Set([\n 'useAnimatedGestureHandler',\n 'useAnimatedScrollHandler',\n]);\n\nexport function processForCalleesWorklets(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n const callee = isSequenceExpression(path.node.callee)\n ? path.node.callee.expressions[path.node.callee.expressions.length - 1]\n : path.node.callee;\n\n // We are looking for objects we know we should workletize\n // hence if object is not named, we return.\n const name =\n 'name' in callee\n ? callee.name\n : 'property' in callee && 'name' in callee.property\n ? callee.property.name\n : undefined;\n if (name === undefined) {\n return;\n }\n\n if (objectHooks.has(name)) {\n const workletToProcess = path.get('arguments.0');\n assert(!Array.isArray(workletToProcess), \"'workletToProcess' is an array'\");\n if (workletToProcess.isObjectExpression()) {\n processObjectHook(workletToProcess, state);\n }\n } else {\n const indices = functionArgsToWorkletize.get(name);\n if (indices === undefined) {\n return;\n }\n processArguments(path, indices, state);\n }\n}\n\nfunction processObjectHook(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n const properties = path.get('properties');\n for (const property of properties) {\n if (property.isObjectMethod()) {\n processWorkletObjectMethod(property, state);\n } else if (property.isObjectProperty()) {\n const value = property.get('value');\n assert(!Array.isArray(value), \"'value' is an array'\");\n processIfWorkletFunction(value, state);\n } else {\n throw new Error(\n `'${property.type}' as to-be workletized arguments is not supported for object hooks`\n );\n }\n }\n}\n\nfunction processArguments(\n path: NodePath,\n indices: number[],\n state: ReanimatedPluginPass\n) {\n const argumentsArray = path.get('arguments');\n indices.forEach((index) => {\n const argumentToWorkletize = argumentsArray[index];\n if (!argumentToWorkletize) {\n // workletizable argument doesn't always have to be specified\n return;\n }\n processIfWorkletFunction(argumentToWorkletize, state);\n });\n}\n", "import { NodePath } from '@babel/core';\nimport {\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n isBlockStatement,\n isDirectiveLiteral,\n} from '@babel/types';\nimport { processIfWorkletFunction } from './processIfWorkletFunction';\nimport { ReanimatedPluginPass } from './types';\n\nexport function processIfWorkletNode(\n fun: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n) {\n fun.traverse({\n DirectiveLiteral(path) {\n const value = path.node.value;\n if (\n value === 'worklet' &&\n path.getFunctionParent() === fun &&\n isBlockStatement(fun.node.body)\n ) {\n // make sure \"worklet\" is listed among directives for the fun\n // this is necessary as because of some bug, babel will attempt to\n // process replaced function if it is nested inside another function\n const directives = fun.node.body.directives;\n if (\n directives &&\n directives.length > 0 &&\n directives.some(\n (directive) =>\n isDirectiveLiteral(directive.value) &&\n directive.value.value === 'worklet'\n )\n ) {\n processIfWorkletFunction(fun, state);\n }\n }\n },\n });\n}\n", "import { NodePath } from '@babel/core';\nimport {\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n isIdentifier,\n isCallExpression,\n Expression,\n isMemberExpression,\n isExpression,\n} from '@babel/types';\nimport { processIfWorkletFunction } from './processIfWorkletFunction';\nimport { ReanimatedPluginPass } from './types';\n\nconst gestureHandlerGestureObjects = new Set([\n // from https://github.com/software-mansion/react-native-gesture-handler/blob/new-api/src/handlers/gestures/gestureObjects.ts\n 'Tap',\n 'Pan',\n 'Pinch',\n 'Rotation',\n 'Fling',\n 'LongPress',\n 'ForceTouch',\n 'Native',\n 'Manual',\n 'Race',\n 'Simultaneous',\n 'Exclusive',\n]);\n\nconst gestureHandlerBuilderMethods = new Set([\n 'onBegin',\n 'onStart',\n 'onEnd',\n 'onFinalize',\n 'onUpdate',\n 'onChange',\n 'onTouchesDown',\n 'onTouchesMove',\n 'onTouchesUp',\n 'onTouchesCancelled',\n]);\n\n// Auto-workletizes React Native Gesture Handler callback functions.\n// Detects `Gesture.Tap().onEnd()` or similar, but skips `something.onEnd()`.\n// Supports method chaining as well, e.g. `Gesture.Tap().onStart().onUpdate().onEnd()`.\n\n// Example #1: `Gesture.Tap().onEnd()`\n/*\n CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: Identifier('Gesture')\n property: Identifier('Tap')\n )\n )\n property: Identifier('onEnd')\n )\n arguments: [fun]\n )\n */\n\n// Example #2: `Gesture.Tap().onStart().onUpdate().onEnd()`\n/*\n CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: Identifier('Gesture')\n property: Identifier('Tap')\n )\n )\n property: Identifier('onStart')\n )\n arguments: [fun1]\n )\n property: Identifier('onUpdate')\n )\n arguments: [fun2]\n )\n property: Identifier('onEnd')\n )\n arguments: [fun3]\n )\n */\nexport function processIfGestureHandlerEventCallbackFunctionNode(\n path: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n) {\n if (\n isCallExpression(path.parent) &&\n isExpression(path.parent.callee) &&\n isGestureObjectEventCallbackMethod(path.parent.callee)\n ) {\n processIfWorkletFunction(path, state);\n }\n}\n\nfunction isGestureObjectEventCallbackMethod(exp: Expression) {\n // Checks if node matches the pattern `Gesture.Foo()[*].onBar`\n // where `[*]` represents any number of method calls.\n return (\n isMemberExpression(exp) &&\n isIdentifier(exp.property) &&\n gestureHandlerBuilderMethods.has(exp.property.name) &&\n containsGestureObject(exp.object)\n );\n}\n\nfunction containsGestureObject(exp: Expression) {\n // Checks if node matches the pattern `Gesture.Foo()[*]`\n // where `[*]` represents any number of chained method calls, like `.something(42)`.\n\n // direct call\n if (isGestureObject(exp)) {\n return true;\n }\n\n // method chaining\n if (\n isCallExpression(exp) &&\n isMemberExpression(exp.callee) &&\n containsGestureObject(exp.callee.object)\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction isGestureObject(exp: Expression) {\n // Checks if node matches `Gesture.Tap()` or similar.\n /*\n node: CallExpression(\n callee: MemberExpression(\n object: Identifier('Gesture')\n property: Identifier('Tap')\n )\n )\n */\n return (\n isCallExpression(exp) &&\n isMemberExpression(exp.callee) &&\n isIdentifier(exp.callee.object) &&\n exp.callee.object.name === 'Gesture' &&\n isIdentifier(exp.callee.property) &&\n gestureHandlerGestureObjects.has(exp.callee.property.name)\n );\n}\n", "import { NodePath } from '@babel/core';\nimport {\n MemberExpression,\n callExpression,\n arrowFunctionExpression,\n isArrayExpression,\n ObjectExpression,\n JSXAttribute,\n isJSXExpressionContainer,\n identifier,\n stringLiteral,\n expressionStatement,\n memberExpression,\n returnStatement,\n blockStatement,\n ObjectProperty,\n isIdentifier,\n} from '@babel/types';\nimport { isRelease } from './utils';\nimport { ReanimatedPluginPass } from './types';\nimport { strict as assert } from 'assert';\n\nfunction generateInlineStylesWarning(path: NodePath) {\n // replaces `sharedvalue.value` with `(()=>{console.warn(require('react-native-reanimated').getUseOfValueInStyleWarning());return sharedvalue.value;})()`\n return callExpression(\n arrowFunctionExpression(\n [],\n blockStatement([\n expressionStatement(\n callExpression(\n memberExpression(identifier('console'), identifier('warn')),\n [\n callExpression(\n memberExpression(\n callExpression(identifier('require'), [\n stringLiteral('react-native-reanimated'),\n ]),\n identifier('getUseOfValueInStyleWarning')\n ),\n []\n ),\n ]\n )\n ),\n returnStatement(path.node),\n ])\n ),\n []\n );\n}\n\nfunction processPropertyValueForInlineStylesWarning(\n path: NodePath\n) {\n // if it's something like object.value then raise a warning\n if (path.isMemberExpression() && isIdentifier(path.node.property)) {\n if (path.node.property.name === 'value') {\n path.replaceWith(generateInlineStylesWarning(path));\n }\n }\n}\n\nfunction processTransformPropertyForInlineStylesWarning(\n path: NodePath\n) {\n if (isArrayExpression(path.node)) {\n const elements = path.get('elements');\n assert(Array.isArray(elements), \"'elements' should be an array\");\n for (const element of elements) {\n if (element.isObjectExpression()) {\n processStyleObjectForInlineStylesWarning(element);\n }\n }\n }\n}\n\nfunction processStyleObjectForInlineStylesWarning(\n path: NodePath\n) {\n const properties = path.get('properties');\n for (const property of properties) {\n if (property.isObjectProperty()) {\n const value = property.get('value');\n if (\n isIdentifier(property.node.key) &&\n property.node.key.name === 'transform'\n ) {\n processTransformPropertyForInlineStylesWarning(value);\n } else {\n processPropertyValueForInlineStylesWarning(value);\n }\n }\n }\n}\n\nexport function processInlineStylesWarning(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n if (isRelease()) {\n return;\n }\n if (state.opts.disableInlineStylesWarning) {\n return;\n }\n if (path.node.name.name !== 'style') {\n return;\n }\n if (!isJSXExpressionContainer(path.node.value)) {\n return;\n }\n\n const expression = path.get('value').get('expression');\n // style={[{...}, {...}]}\n assert(!Array.isArray(expression), \"'expression' should not be an array\");\n if (expression.isArrayExpression()) {\n const elements = expression.get('elements');\n assert(Array.isArray(elements), \"'elements' should be an array\");\n for (const element of elements) {\n if (element.isObjectExpression()) {\n processStyleObjectForInlineStylesWarning(element);\n }\n }\n }\n // style={{...}}\n else if (expression.isObjectExpression()) {\n processStyleObjectForInlineStylesWarning(expression);\n }\n}\n", "import { NodePath } from '@babel/core';\nimport {\n DirectiveLiteral,\n expressionStatement,\n assignmentExpression,\n memberExpression,\n identifier,\n stringLiteral,\n FunctionDeclaration,\n} from '@babel/types';\n\nexport function injectVersion(path: NodePath) {\n // We want to inject plugin's version only once,\n // hence we have a Directive Literal line in Reanimated code.\n // See src/reanimated2/platform-specific/checkPluginVersion.ts\n // to see the details of this implementation.\n if (path.node.value !== 'inject Reanimated Babel plugin version') {\n return;\n }\n const injectedName = '_REANIMATED_VERSION_BABEL_PLUGIN';\n const versionString = require('../../package.json').version;\n const pluginVersionNode = expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(identifier('global'), identifier(injectedName)),\n stringLiteral(versionString)\n )\n );\n\n // Function that contains injection directive literal is a FunctionDeclaration.\n const functionParent = (\n path.getFunctionParent() as NodePath\n ).node;\n // DirectiveLiteral is in property of its function parent 'directives' hence we cannot just replace it.\n functionParent.body.directives = [];\n functionParent.body.body.unshift(pluginVersionNode);\n}\n", "import { PluginItem, NodePath } from '@babel/core';\nimport { globals } from './commonObjects';\nimport {\n CallExpression,\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n DirectiveLiteral,\n} from '@babel/types';\nimport { processForCalleesWorklets } from './processForCalleesWorklets';\nimport { ReanimatedPluginPass } from './types';\nimport { processIfWorkletNode } from './processIfWorkletNode';\nimport { processIfGestureHandlerEventCallbackFunctionNode } from './processIfGestureHandlerEventCallbackFunctionNode';\nimport { processInlineStylesWarning } from './processInlineStylesWarning';\nimport { injectVersion } from './injectVersion';\n\nmodule.exports = function (): PluginItem {\n return {\n pre() {\n // allows adding custom globals such as host-functions\n if (this.opts != null && Array.isArray(this.opts.globals)) {\n this.opts.globals.forEach((name: string) => {\n globals.add(name);\n });\n }\n },\n visitor: {\n DirectiveLiteral: {\n enter(path: NodePath) {\n injectVersion(path);\n },\n },\n CallExpression: {\n enter(path: NodePath, state: ReanimatedPluginPass) {\n processForCalleesWorklets(path, state);\n },\n },\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression': {\n enter(\n path: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n ) {\n processIfWorkletNode(path, state);\n processIfGestureHandlerEventCallbackFunctionNode(path, state);\n },\n },\n JSXAttribute: {\n enter(path, state) {\n processInlineStylesWarning(path, state);\n },\n },\n },\n };\n};\n"], - "mappings": "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", + "sourcesContent": ["export const globals = new Set([\n 'this',\n 'console',\n 'performance',\n 'Date',\n 'Array',\n 'ArrayBuffer',\n 'Int8Array',\n 'Int16Array',\n 'Int32Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Uint16Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'HermesInternal',\n 'JSON',\n 'Math',\n 'Number',\n 'Object',\n 'String',\n 'Symbol',\n 'undefined',\n 'null',\n 'UIManager',\n 'requestAnimationFrame',\n 'setImmediate',\n 'queueMicrotask',\n '_WORKLET',\n 'arguments',\n 'Boolean',\n 'parseInt',\n 'parseFloat',\n 'Map',\n 'WeakMap',\n 'WeakRef',\n 'Set',\n '_log',\n '_scheduleOnJS',\n '_makeShareableClone',\n '_updateDataSynchronously',\n 'eval',\n '_updatePropsPaper',\n '_updatePropsFabric',\n '_removeShadowNodeFromRegistry',\n 'RegExp',\n 'Error',\n 'ErrorUtils',\n 'global',\n '_measure',\n '_scrollTo',\n '_dispatchCommand',\n '_setGestureState',\n '_getCurrentTime',\n 'isNaN',\n 'LayoutAnimationRepository',\n '_notifyAboutProgress',\n '_notifyAboutEnd',\n]);\n", "export function isRelease() {\n return (\n process.env.BABEL_ENV &&\n ['production', 'release'].includes(process.env.BABEL_ENV)\n );\n}\n", "import {\n BabelFileResult,\n NodePath,\n transformSync,\n PluginItem,\n} from '@babel/core';\nimport generate from '@babel/generator';\nimport {\n ObjectMethod,\n isObjectMethod,\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n identifier,\n Identifier,\n objectProperty,\n isArrowFunctionExpression,\n variableDeclaration,\n variableDeclarator,\n isBlockStatement,\n functionExpression,\n isFunctionDeclaration,\n VariableDeclaration,\n ExpressionStatement,\n isProgram,\n memberExpression,\n File as BabelFile,\n objectPattern,\n thisExpression,\n isExpression,\n isExpressionStatement,\n} from '@babel/types';\nimport * as fs from 'fs';\nimport * as convertSourceMap from 'convert-source-map';\nimport { strict as assert } from 'assert';\nimport { isRelease } from './utils';\n\nexport function buildWorkletString(\n fun: BabelFile,\n closureVariables: Array,\n name: string,\n inputMap: BabelFileResult['map']\n): Array {\n const draftExpression = (fun.program.body.find((obj) =>\n isFunctionDeclaration(obj)\n ) ||\n fun.program.body.find((obj) => isExpressionStatement(obj)) ||\n undefined) as FunctionDeclaration | ExpressionStatement | undefined;\n\n assert(draftExpression, \"'draftExpression' is undefined\");\n\n const expression = isFunctionDeclaration(draftExpression)\n ? draftExpression\n : draftExpression.expression;\n\n assert(\n 'params' in expression,\n \"'params' property is undefined in 'expression'\"\n );\n assert(\n isBlockStatement(expression.body),\n \"'expression.body' is not a 'BlockStatement'\"\n );\n\n const workletFunction = functionExpression(\n identifier(name),\n expression.params,\n expression.body\n );\n\n const code = generate(workletFunction).code;\n\n assert(inputMap, \"'inputMap' is undefined\");\n\n const includeSourceMap = shouldGenerateSourceMap();\n\n if (includeSourceMap) {\n // Clear contents array (should be empty anyways)\n inputMap.sourcesContent = [];\n // Include source contents in source map, because Flipper/iframe is not\n // allowed to read files from disk.\n for (const sourceFile of inputMap.sources) {\n inputMap.sourcesContent.push(\n fs.readFileSync(sourceFile).toString('utf-8')\n );\n }\n }\n\n const transformed = transformSync(code, {\n plugins: [prependClosureVariablesIfNecessary(closureVariables)],\n compact: !includeSourceMap,\n sourceMaps: includeSourceMap,\n inputSourceMap: inputMap,\n ast: false,\n babelrc: false,\n configFile: false,\n comments: false,\n });\n\n assert(transformed, \"'transformed' is null\");\n\n let sourceMap;\n if (includeSourceMap) {\n sourceMap = convertSourceMap.fromObject(transformed.map).toObject();\n // sourcesContent field contains a full source code of the file which contains the worklet\n // and is not needed by the source map interpreter in order to symbolicate a stack trace.\n // Therefore, we remove it to reduce the bandwith and avoid sending it potentially multiple times\n // in files that contain multiple worklets. Along with sourcesContent.\n delete sourceMap.sourcesContent;\n }\n\n return [transformed.code, JSON.stringify(sourceMap)];\n}\n\nfunction shouldGenerateSourceMap() {\n if (isRelease()) {\n return false;\n }\n\n if (process.env.REANIMATED_PLUGIN_TESTS === 'jest') {\n // We want to detect this, so we can disable source maps (because they break\n // snapshot tests with jest).\n return false;\n }\n\n return true;\n}\n\nfunction prependClosure(\n path: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression\n | ObjectMethod\n >,\n closureVariables: Array,\n closureDeclaration: VariableDeclaration\n) {\n if (closureVariables.length === 0 || !isProgram(path.parent)) {\n return;\n }\n\n if (!isExpression(path.node.body)) {\n path.node.body.body.unshift(closureDeclaration);\n }\n}\n\nfunction prependRecursiveDeclaration(\n path: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression\n | ObjectMethod\n >\n) {\n if (\n isProgram(path.parent) &&\n !isArrowFunctionExpression(path.node) &&\n !isObjectMethod(path.node) &&\n path.node.id &&\n path.scope.parent\n ) {\n const hasRecursiveCalls =\n path.scope.parent.bindings[path.node.id.name]?.references > 0;\n if (hasRecursiveCalls) {\n path.node.body.body.unshift(\n variableDeclaration('const', [\n variableDeclarator(\n identifier(path.node.id.name),\n memberExpression(thisExpression(), identifier('_recur'))\n ),\n ])\n );\n }\n }\n}\n\nfunction prependClosureVariablesIfNecessary(\n closureVariables: Array\n): PluginItem {\n const closureDeclaration = variableDeclaration('const', [\n variableDeclarator(\n objectPattern(\n closureVariables.map((variable) =>\n objectProperty(\n identifier(variable.name),\n identifier(variable.name),\n false,\n true\n )\n )\n ),\n memberExpression(thisExpression(), identifier('_closure'))\n ),\n ]);\n\n return {\n visitor: {\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod':\n (\n path: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression\n | ObjectMethod\n >\n ) => {\n prependClosure(path, closureVariables, closureDeclaration);\n prependRecursiveDeclaration(path);\n },\n },\n };\n}\n", "import { NodePath, transformSync, traverse } from '@babel/core';\nimport generate from '@babel/generator';\nimport {\n ObjectMethod,\n isObjectMethod,\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n identifier,\n Identifier,\n objectProperty,\n variableDeclaration,\n variableDeclarator,\n cloneNode,\n isBlockStatement,\n functionExpression,\n objectExpression,\n stringLiteral,\n isFunctionDeclaration,\n VariableDeclaration,\n ExpressionStatement,\n ReturnStatement,\n isProgram,\n isObjectProperty,\n isMemberExpression,\n isObjectExpression,\n expressionStatement,\n assignmentExpression,\n memberExpression,\n numericLiteral,\n arrayExpression,\n newExpression,\n returnStatement,\n blockStatement,\n isFunctionExpression,\n isIdentifier,\n File as BabelFile,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { isRelease } from './utils';\nimport { strict as assert } from 'assert';\nimport { globals } from './commonObjects';\nimport { relative } from 'path';\nimport { buildWorkletString } from './buildWorkletString';\n\nexport function makeWorklet(\n fun: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ObjectMethod\n | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n): FunctionExpression {\n // Returns a new FunctionExpression which is a workletized version of provided\n // FunctionDeclaration, FunctionExpression, ArrowFunctionExpression or ObjectMethod.\n\n const functionName = makeWorkletName(fun);\n\n // remove 'worklet'; directive before generating string\n fun.traverse({\n DirectiveLiteral(path) {\n if (path.node.value === 'worklet' && path.getFunctionParent() === fun) {\n path.parentPath.remove();\n }\n },\n });\n\n // We use copy because some of the plugins don't update bindings and\n // some even break them\n assert(state.file.opts.filename, \"'state.file.opts.filename' is undefined\");\n\n const codeObject = generate(fun.node, {\n sourceMaps: true,\n sourceFileName: state.file.opts.filename,\n });\n\n // We need to add a newline at the end, because there could potentially be a\n // comment after the function that gets included here, and then the closing\n // bracket would become part of the comment thus resulting in an error, since\n // there is a missing closing bracket.\n codeObject.code =\n '(' + (isObjectMethod(fun) ? 'function ' : '') + codeObject.code + '\\n)';\n\n const transformed = transformSync(codeObject.code, {\n filename: state.file.opts.filename,\n presets: ['@babel/preset-typescript'],\n plugins: [\n '@babel/plugin-transform-shorthand-properties',\n '@babel/plugin-transform-arrow-functions',\n '@babel/plugin-proposal-optional-chaining',\n '@babel/plugin-proposal-nullish-coalescing-operator',\n ['@babel/plugin-transform-template-literals', { loose: true }],\n ],\n ast: true,\n babelrc: false,\n configFile: false,\n inputSourceMap: codeObject.map,\n });\n\n assert(transformed, \"'transformed' is undefined\");\n assert(transformed.ast, \"'transformed.ast' is undefined\");\n\n const variables = makeArrayFromCapturedBindings(transformed.ast, fun);\n\n const privateFunctionId = identifier('_f');\n const clone = cloneNode(fun.node);\n const funExpression = isBlockStatement(clone.body)\n ? functionExpression(null, clone.params, clone.body)\n : clone;\n\n const [funString, sourceMapString] = buildWorkletString(\n transformed.ast,\n variables,\n functionName,\n transformed.map\n );\n assert(funString, \"'funString' is undefined\");\n const workletHash = hash(funString);\n\n let location = state.file.opts.filename;\n if (state.opts.relativeSourceLocation) {\n location = relative(state.cwd, location);\n }\n\n let lineOffset = 1;\n if (variables.length > 0) {\n // When worklet captures some variables, we append closure destructing at\n // the beginning of the function body. This effectively results in line\n // numbers shifting by the number of captured variables (size of the\n // closure) + 2 (for the opening and closing brackets of the destruct\n // statement)\n lineOffset -= variables.length + 2;\n }\n\n const pathForStringDefinitions = fun.parentPath.isProgram()\n ? fun\n : fun.findParent((path) => isProgram(path.parentPath));\n assert(pathForStringDefinitions, \"'pathForStringDefinitions' is null\");\n assert(\n pathForStringDefinitions.parentPath,\n \"'pathForStringDefinitions.parentPath' is null\"\n );\n\n const initDataId =\n pathForStringDefinitions.parentPath.scope.generateUidIdentifier(\n `worklet_${workletHash}_init_data`\n );\n\n const initDataObjectExpression = objectExpression([\n objectProperty(identifier('code'), stringLiteral(funString)),\n objectProperty(identifier('location'), stringLiteral(location)),\n ]);\n\n if (sourceMapString) {\n initDataObjectExpression.properties.push(\n objectProperty(identifier('sourceMap'), stringLiteral(sourceMapString))\n );\n }\n\n pathForStringDefinitions.insertBefore(\n variableDeclaration('const', [\n variableDeclarator(initDataId, initDataObjectExpression),\n ])\n );\n\n assert(\n !isFunctionDeclaration(funExpression),\n \"'funExpression' is a 'FunctionDeclaration'\"\n );\n assert(\n !isObjectMethod(funExpression),\n \"'funExpression' is an 'ObjectMethod'\"\n );\n\n const statements: Array<\n VariableDeclaration | ExpressionStatement | ReturnStatement\n > = [\n variableDeclaration('const', [\n variableDeclarator(privateFunctionId, funExpression),\n ]),\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(privateFunctionId, identifier('_closure'), false),\n objectExpression(\n variables.map((variable) =>\n objectProperty(identifier(variable.name), variable, false, true)\n )\n )\n )\n ),\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(privateFunctionId, identifier('__initData'), false),\n initDataId\n )\n ),\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(privateFunctionId, identifier('__workletHash'), false),\n numericLiteral(workletHash)\n )\n ),\n ];\n\n if (!isRelease()) {\n statements.unshift(\n variableDeclaration('const', [\n variableDeclarator(\n identifier('_e'),\n arrayExpression([\n newExpression(\n memberExpression(identifier('global'), identifier('Error')),\n []\n ),\n numericLiteral(lineOffset),\n numericLiteral(-27), // the placement of opening bracket after Exception in line that defined '_e' variable\n ])\n ),\n ])\n );\n statements.push(\n expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(\n privateFunctionId,\n identifier('__stackDetails'),\n false\n ),\n identifier('_e')\n )\n )\n );\n }\n\n statements.push(returnStatement(privateFunctionId));\n\n const newFun = functionExpression(undefined, [], blockStatement(statements));\n\n return newFun;\n}\n\nfunction hash(str: string) {\n let i = str.length;\n let hash1 = 5381;\n let hash2 = 52711;\n\n while (i--) {\n const char = str.charCodeAt(i);\n // eslint-disable-next-line no-bitwise\n hash1 = (hash1 * 33) ^ char;\n // eslint-disable-next-line no-bitwise\n hash2 = (hash2 * 33) ^ char;\n }\n\n // eslint-disable-next-line no-bitwise\n return (hash1 >>> 0) * 4096 + (hash2 >>> 0);\n}\n\nfunction makeWorkletName(\n fun: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ObjectMethod\n | ArrowFunctionExpression\n >\n) {\n if (isObjectMethod(fun.node) && 'name' in fun.node.key) {\n return fun.node.key.name;\n }\n if (isFunctionDeclaration(fun.node) && fun.node.id) {\n return fun.node.id.name;\n }\n if (isFunctionExpression(fun.node) && isIdentifier(fun.node.id)) {\n return fun.node.id.name;\n }\n return 'anonymous'; // fallback for ArrowFunctionExpression and unnamed FunctionExpression\n}\n\nfunction makeArrayFromCapturedBindings(\n ast: BabelFile,\n fun: NodePath<\n | FunctionDeclaration\n | FunctionExpression\n | ObjectMethod\n | ArrowFunctionExpression\n >\n) {\n const closure = new Map();\n\n // this traversal looks for variables to capture\n traverse(ast, {\n Identifier(path) {\n // we only capture variables that were declared outside of the scope\n if (!path.isReferencedIdentifier()) {\n return;\n }\n const name = path.node.name;\n // if the function is named and was added to globals we don't want to add it to closure\n // hence we check if identifier has that name\n if (globals.has(name)) {\n return;\n }\n if (\n 'id' in fun.node &&\n fun.node.id &&\n fun.node.id.name === name // we don't want to capture function's own name\n ) {\n return;\n }\n\n const parentNode = path.parent;\n\n if (\n isMemberExpression(parentNode) &&\n parentNode.property === path.node &&\n !parentNode.computed\n ) {\n return;\n }\n\n if (\n isObjectProperty(parentNode) &&\n isObjectExpression(path.parentPath.parent) &&\n path.node !== parentNode.value\n ) {\n return;\n }\n\n let currentScope = path.scope;\n\n while (currentScope != null) {\n if (currentScope.bindings[name] != null) {\n return;\n }\n currentScope = currentScope.parent;\n }\n closure.set(name, path.node);\n },\n });\n\n return Array.from(closure.values());\n}\n", "import { NodePath } from '@babel/core';\nimport {\n ObjectMethod,\n identifier,\n isIdentifier,\n isFunctionParent,\n objectProperty,\n callExpression,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { makeWorklet } from './makeWorklet';\n\nexport function processWorkletObjectMethod(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n // Replaces ObjectMethod with a workletized version of itself.\n\n if (!isFunctionParent(path)) {\n return;\n }\n\n const newFun = makeWorklet(path, state);\n\n const replacement = objectProperty(\n identifier(isIdentifier(path.node.key) ? path.node.key.name : ''),\n callExpression(newFun, [])\n );\n\n path.replaceWith(replacement);\n}\n", "import { NodePath, Node } from '@babel/core';\nimport {\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n callExpression,\n isScopable,\n isExportNamedDeclaration,\n variableDeclaration,\n variableDeclarator,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { makeWorklet } from './makeWorklet';\n\n// Replaces FunctionDeclaration, FunctionExpression or ArrowFunctionExpression\n// with a workletized version of itself.\n\nexport function processIfWorkletFunction(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n if (\n path.isFunctionDeclaration() ||\n path.isFunctionExpression() ||\n path.isArrowFunctionExpression()\n ) {\n processWorkletFunction(path, state);\n }\n}\n\nfunction processWorkletFunction(\n path: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n) {\n const newFun = makeWorklet(path, state);\n\n const replacement = callExpression(newFun, []);\n\n // we check if function needs to be assigned to variable declaration.\n // This is needed if function definition directly in a scope. Some other ways\n // where function definition can be used is for example with variable declaration:\n // const ggg = function foo() { }\n // ^ in such a case we don't need to define variable for the function\n const needDeclaration =\n isScopable(path.parent) || isExportNamedDeclaration(path.parent);\n path.replaceWith(\n 'id' in path.node && path.node.id && needDeclaration\n ? variableDeclaration('const', [\n variableDeclarator(path.node.id, replacement),\n ])\n : replacement\n );\n}\n", "import { NodePath } from '@babel/core';\nimport {\n CallExpression,\n isSequenceExpression,\n ObjectExpression,\n} from '@babel/types';\nimport { ReanimatedPluginPass } from './types';\nimport { processWorkletObjectMethod } from './processWorkletObjectMethod';\nimport { processIfWorkletFunction } from './processIfWorkletFunction';\nimport { strict as assert } from 'assert';\n\nconst functionArgsToWorkletize = new Map([\n ['useFrameCallback', [0]],\n ['useAnimatedStyle', [0]],\n ['useAnimatedProps', [0]],\n ['createAnimatedPropAdapter', [0]],\n ['useDerivedValue', [0]],\n ['useAnimatedScrollHandler', [0]],\n ['useAnimatedReaction', [0, 1]],\n ['useWorkletCallback', [0]],\n // animations' callbacks\n ['withTiming', [2]],\n ['withSpring', [2]],\n ['withDecay', [1]],\n ['withRepeat', [3]],\n]);\n\nconst objectHooks = new Set([\n 'useAnimatedGestureHandler',\n 'useAnimatedScrollHandler',\n]);\n\nexport function processForCalleesWorklets(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n const callee = isSequenceExpression(path.node.callee)\n ? path.node.callee.expressions[path.node.callee.expressions.length - 1]\n : path.node.callee;\n\n // We are looking for objects we know we should workletize\n // hence if object is not named, we return.\n const name =\n 'name' in callee\n ? callee.name\n : 'property' in callee && 'name' in callee.property\n ? callee.property.name\n : undefined;\n if (name === undefined) {\n return;\n }\n\n if (objectHooks.has(name)) {\n const workletToProcess = path.get('arguments.0');\n assert(!Array.isArray(workletToProcess), \"'workletToProcess' is an array'\");\n if (workletToProcess.isObjectExpression()) {\n processObjectHook(workletToProcess, state);\n // useAnimatedScrollHandler can take a function as an argument instead of an ObjectExpression\n // but useAnimatedGestureHandler can't\n } else if (name === 'useAnimatedScrollHandler') {\n processIfWorkletFunction(workletToProcess, state);\n }\n } else {\n const indices = functionArgsToWorkletize.get(name);\n if (indices === undefined) {\n return;\n }\n processArguments(path, indices, state);\n }\n}\n\nfunction processObjectHook(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n const properties = path.get('properties');\n for (const property of properties) {\n if (property.isObjectMethod()) {\n processWorkletObjectMethod(property, state);\n } else if (property.isObjectProperty()) {\n const value = property.get('value');\n assert(!Array.isArray(value), \"'value' is an array'\");\n processIfWorkletFunction(value, state);\n } else {\n throw new Error(\n `'${property.type}' as to-be workletized arguments is not supported for object hooks`\n );\n }\n }\n}\n\nfunction processArguments(\n path: NodePath,\n indices: number[],\n state: ReanimatedPluginPass\n) {\n const argumentsArray = path.get('arguments');\n indices.forEach((index) => {\n const argumentToWorkletize = argumentsArray[index];\n if (!argumentToWorkletize) {\n // workletizable argument doesn't always have to be specified\n return;\n }\n processIfWorkletFunction(argumentToWorkletize, state);\n });\n}\n", "import { NodePath } from '@babel/core';\nimport {\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n isBlockStatement,\n isDirectiveLiteral,\n} from '@babel/types';\nimport { processIfWorkletFunction } from './processIfWorkletFunction';\nimport { ReanimatedPluginPass } from './types';\n\nexport function processIfWorkletNode(\n fun: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n) {\n fun.traverse({\n DirectiveLiteral(path) {\n const value = path.node.value;\n if (\n value === 'worklet' &&\n path.getFunctionParent() === fun &&\n isBlockStatement(fun.node.body)\n ) {\n // make sure \"worklet\" is listed among directives for the fun\n // this is necessary as because of some bug, babel will attempt to\n // process replaced function if it is nested inside another function\n const directives = fun.node.body.directives;\n if (\n directives &&\n directives.length > 0 &&\n directives.some(\n (directive) =>\n isDirectiveLiteral(directive.value) &&\n directive.value.value === 'worklet'\n )\n ) {\n processIfWorkletFunction(fun, state);\n }\n }\n },\n });\n}\n", "import { NodePath } from '@babel/core';\nimport {\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n isIdentifier,\n isCallExpression,\n Expression,\n isMemberExpression,\n isExpression,\n} from '@babel/types';\nimport { processIfWorkletFunction } from './processIfWorkletFunction';\nimport { ReanimatedPluginPass } from './types';\n\nconst gestureHandlerGestureObjects = new Set([\n // from https://github.com/software-mansion/react-native-gesture-handler/blob/new-api/src/handlers/gestures/gestureObjects.ts\n 'Tap',\n 'Pan',\n 'Pinch',\n 'Rotation',\n 'Fling',\n 'LongPress',\n 'ForceTouch',\n 'Native',\n 'Manual',\n 'Race',\n 'Simultaneous',\n 'Exclusive',\n]);\n\nconst gestureHandlerBuilderMethods = new Set([\n 'onBegin',\n 'onStart',\n 'onEnd',\n 'onFinalize',\n 'onUpdate',\n 'onChange',\n 'onTouchesDown',\n 'onTouchesMove',\n 'onTouchesUp',\n 'onTouchesCancelled',\n]);\n\n// Auto-workletizes React Native Gesture Handler callback functions.\n// Detects `Gesture.Tap().onEnd()` or similar, but skips `something.onEnd()`.\n// Supports method chaining as well, e.g. `Gesture.Tap().onStart().onUpdate().onEnd()`.\n\n// Example #1: `Gesture.Tap().onEnd()`\n/*\n CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: Identifier('Gesture')\n property: Identifier('Tap')\n )\n )\n property: Identifier('onEnd')\n )\n arguments: [fun]\n )\n */\n\n// Example #2: `Gesture.Tap().onStart().onUpdate().onEnd()`\n/*\n CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: CallExpression(\n callee: MemberExpression(\n object: Identifier('Gesture')\n property: Identifier('Tap')\n )\n )\n property: Identifier('onStart')\n )\n arguments: [fun1]\n )\n property: Identifier('onUpdate')\n )\n arguments: [fun2]\n )\n property: Identifier('onEnd')\n )\n arguments: [fun3]\n )\n */\nexport function processIfGestureHandlerEventCallbackFunctionNode(\n path: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n) {\n if (\n isCallExpression(path.parent) &&\n isExpression(path.parent.callee) &&\n isGestureObjectEventCallbackMethod(path.parent.callee)\n ) {\n processIfWorkletFunction(path, state);\n }\n}\n\nfunction isGestureObjectEventCallbackMethod(exp: Expression) {\n // Checks if node matches the pattern `Gesture.Foo()[*].onBar`\n // where `[*]` represents any number of method calls.\n return (\n isMemberExpression(exp) &&\n isIdentifier(exp.property) &&\n gestureHandlerBuilderMethods.has(exp.property.name) &&\n containsGestureObject(exp.object)\n );\n}\n\nfunction containsGestureObject(exp: Expression) {\n // Checks if node matches the pattern `Gesture.Foo()[*]`\n // where `[*]` represents any number of chained method calls, like `.something(42)`.\n\n // direct call\n if (isGestureObject(exp)) {\n return true;\n }\n\n // method chaining\n if (\n isCallExpression(exp) &&\n isMemberExpression(exp.callee) &&\n containsGestureObject(exp.callee.object)\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction isGestureObject(exp: Expression) {\n // Checks if node matches `Gesture.Tap()` or similar.\n /*\n node: CallExpression(\n callee: MemberExpression(\n object: Identifier('Gesture')\n property: Identifier('Tap')\n )\n )\n */\n return (\n isCallExpression(exp) &&\n isMemberExpression(exp.callee) &&\n isIdentifier(exp.callee.object) &&\n exp.callee.object.name === 'Gesture' &&\n isIdentifier(exp.callee.property) &&\n gestureHandlerGestureObjects.has(exp.callee.property.name)\n );\n}\n", "import { NodePath } from '@babel/core';\nimport {\n MemberExpression,\n callExpression,\n arrowFunctionExpression,\n isArrayExpression,\n ObjectExpression,\n JSXAttribute,\n isJSXExpressionContainer,\n identifier,\n stringLiteral,\n expressionStatement,\n memberExpression,\n returnStatement,\n blockStatement,\n ObjectProperty,\n isIdentifier,\n} from '@babel/types';\nimport { isRelease } from './utils';\nimport { ReanimatedPluginPass } from './types';\nimport { strict as assert } from 'assert';\n\nfunction generateInlineStylesWarning(path: NodePath) {\n // replaces `sharedvalue.value` with `(()=>{console.warn(require('react-native-reanimated').getUseOfValueInStyleWarning());return sharedvalue.value;})()`\n return callExpression(\n arrowFunctionExpression(\n [],\n blockStatement([\n expressionStatement(\n callExpression(\n memberExpression(identifier('console'), identifier('warn')),\n [\n callExpression(\n memberExpression(\n callExpression(identifier('require'), [\n stringLiteral('react-native-reanimated'),\n ]),\n identifier('getUseOfValueInStyleWarning')\n ),\n []\n ),\n ]\n )\n ),\n returnStatement(path.node),\n ])\n ),\n []\n );\n}\n\nfunction processPropertyValueForInlineStylesWarning(\n path: NodePath\n) {\n // if it's something like object.value then raise a warning\n if (path.isMemberExpression() && isIdentifier(path.node.property)) {\n if (path.node.property.name === 'value') {\n path.replaceWith(generateInlineStylesWarning(path));\n }\n }\n}\n\nfunction processTransformPropertyForInlineStylesWarning(\n path: NodePath\n) {\n if (isArrayExpression(path.node)) {\n const elements = path.get('elements');\n assert(Array.isArray(elements), \"'elements' should be an array\");\n for (const element of elements) {\n if (element.isObjectExpression()) {\n processStyleObjectForInlineStylesWarning(element);\n }\n }\n }\n}\n\nfunction processStyleObjectForInlineStylesWarning(\n path: NodePath\n) {\n const properties = path.get('properties');\n for (const property of properties) {\n if (property.isObjectProperty()) {\n const value = property.get('value');\n if (\n isIdentifier(property.node.key) &&\n property.node.key.name === 'transform'\n ) {\n processTransformPropertyForInlineStylesWarning(value);\n } else {\n processPropertyValueForInlineStylesWarning(value);\n }\n }\n }\n}\n\nexport function processInlineStylesWarning(\n path: NodePath,\n state: ReanimatedPluginPass\n) {\n if (isRelease()) {\n return;\n }\n if (state.opts.disableInlineStylesWarning) {\n return;\n }\n if (path.node.name.name !== 'style') {\n return;\n }\n if (!isJSXExpressionContainer(path.node.value)) {\n return;\n }\n\n const expression = path.get('value').get('expression');\n // style={[{...}, {...}]}\n assert(!Array.isArray(expression), \"'expression' should not be an array\");\n if (expression.isArrayExpression()) {\n const elements = expression.get('elements');\n assert(Array.isArray(elements), \"'elements' should be an array\");\n for (const element of elements) {\n if (element.isObjectExpression()) {\n processStyleObjectForInlineStylesWarning(element);\n }\n }\n }\n // style={{...}}\n else if (expression.isObjectExpression()) {\n processStyleObjectForInlineStylesWarning(expression);\n }\n}\n", "import { NodePath } from '@babel/core';\nimport {\n DirectiveLiteral,\n expressionStatement,\n assignmentExpression,\n memberExpression,\n identifier,\n stringLiteral,\n FunctionDeclaration,\n} from '@babel/types';\n\nexport function injectVersion(path: NodePath) {\n // We want to inject plugin's version only once,\n // hence we have a Directive Literal line in Reanimated code.\n // See src/reanimated2/platform-specific/checkPluginVersion.ts\n // to see the details of this implementation.\n if (path.node.value !== 'inject Reanimated Babel plugin version') {\n return;\n }\n const injectedName = '_REANIMATED_VERSION_BABEL_PLUGIN';\n const versionString = require('../../package.json').version;\n const pluginVersionNode = expressionStatement(\n assignmentExpression(\n '=',\n memberExpression(identifier('global'), identifier(injectedName)),\n stringLiteral(versionString)\n )\n );\n\n // Function that contains injection directive literal is a FunctionDeclaration.\n const functionParent = (\n path.getFunctionParent() as NodePath\n ).node;\n // DirectiveLiteral is in property of its function parent 'directives' hence we cannot just replace it.\n functionParent.body.directives = [];\n functionParent.body.body.unshift(pluginVersionNode);\n}\n", "import { PluginItem, NodePath } from '@babel/core';\nimport { globals } from './commonObjects';\nimport {\n CallExpression,\n FunctionDeclaration,\n FunctionExpression,\n ArrowFunctionExpression,\n DirectiveLiteral,\n} from '@babel/types';\nimport { processForCalleesWorklets } from './processForCalleesWorklets';\nimport { ReanimatedPluginPass } from './types';\nimport { processIfWorkletNode } from './processIfWorkletNode';\nimport { processIfGestureHandlerEventCallbackFunctionNode } from './processIfGestureHandlerEventCallbackFunctionNode';\nimport { processInlineStylesWarning } from './processInlineStylesWarning';\nimport { injectVersion } from './injectVersion';\n\nmodule.exports = function (): PluginItem {\n return {\n pre() {\n // allows adding custom globals such as host-functions\n if (this.opts != null && Array.isArray(this.opts.globals)) {\n this.opts.globals.forEach((name: string) => {\n globals.add(name);\n });\n }\n },\n visitor: {\n DirectiveLiteral: {\n enter(path: NodePath) {\n injectVersion(path);\n },\n },\n CallExpression: {\n enter(path: NodePath, state: ReanimatedPluginPass) {\n processForCalleesWorklets(path, state);\n },\n },\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression': {\n enter(\n path: NodePath<\n FunctionDeclaration | FunctionExpression | ArrowFunctionExpression\n >,\n state: ReanimatedPluginPass\n ) {\n processIfWorkletNode(path, state);\n processIfGestureHandlerEventCallbackFunctionNode(path, state);\n },\n },\n JSXAttribute: {\n enter(path, state) {\n processInlineStylesWarning(path, state);\n },\n },\n },\n };\n};\n"], + "mappings": "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", "names": ["exports", "exports", "exports", "commonObjects_1", "exports", "exports", "exports", "exports", "exports", "exports", "exports", "exports"] } diff --git a/plugin/src/processForCalleesWorklets.ts b/plugin/src/processForCalleesWorklets.ts index 07ec267d121..bcb58577d29 100644 --- a/plugin/src/processForCalleesWorklets.ts +++ b/plugin/src/processForCalleesWorklets.ts @@ -55,6 +55,10 @@ export function processForCalleesWorklets( assert(!Array.isArray(workletToProcess), "'workletToProcess' is an array'"); if (workletToProcess.isObjectExpression()) { processObjectHook(workletToProcess, state); + // useAnimatedScrollHandler can take a function as an argument instead of an ObjectExpression + // but useAnimatedGestureHandler can't + } else if (name === 'useAnimatedScrollHandler') { + processIfWorkletFunction(workletToProcess, state); } } else { const indices = functionArgsToWorkletize.get(name);