{"version":3,"file":"transformWorklets.js","names":[],"sources":["esm/transformWorklets.js"],"sourcesContent":["import fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { configuration, isNativeWorkletsEnabled } from \"./configure\";\nimport {\n  AUTOWORKLET_FUNCTION_ARGS,\n  GESTURE_BUILDER_METHODS\n} from \"./worklets/autoworklet\";\nimport remapping from \"@jridgewell/remapping\";\nimport { isReactNativeCodegenSpec } from \"./reactNativeCodegen\";\nimport { stripFlowTypes } from \"./transformFlow\";\nimport { shouldStripFlow } from \"./transformSWC\";\nimport { executeWorkletTransform } from \"./worklets/transform\";\nimport { prepareWorkletsForReactCompiler } from \"./worklets/transform\";\nconst REANIMATED_AUTOWORKLETIZATION_KEYWORDS = [\n  \"worklet\",\n  \"useAnimatedGestureHandler\",\n  \"useAnimatedScrollHandler\",\n  \"useFrameCallback\",\n  \"useAnimatedStyle\",\n  \"useAnimatedProps\",\n  \"createAnimatedPropAdapter\",\n  \"useDerivedValue\",\n  \"useAnimatedReaction\",\n  \"useWorkletCallback\",\n  \"withTiming\",\n  \"withSpring\",\n  \"withDecay\",\n  \"withRepeat\",\n  \"runOnUI\",\n  \"executeOnUIRuntimeSync\"\n];\nconst REANIMATED_REGEX = new RegExp(\n  [\n    .../* @__PURE__ */ new Set([\n      ...REANIMATED_AUTOWORKLETIZATION_KEYWORDS,\n      ...Object.keys(AUTOWORKLET_FUNCTION_ARGS),\n      // gesture callbacks are only workletized on a `Gesture.<Kind>()` chain,\n      // but this file gate has to be permissive or a file whose only worklets\n      // are gesture callbacks never reaches the transform at all.\n      ...GESTURE_BUILDER_METHODS,\n      \"withCallback\"\n    ])\n  ].map((name) => `\\\\b${name}\\\\b`).join(\"|\")\n);\nconst REANIMATED_IGNORED_PATHS = [\n  \"react-native-prebuilt\",\n  \"node_modules/.vxrn/react-native\",\n  \"node_modules/react/\",\n  \"node_modules/react-dom/\",\n  \"node_modules/react-native/\",\n  // react-native's own scoped packages are flow, and the worklets transform\n  // runs before flow stripping in the vite pipeline. they never hold app\n  // worklets, exactly like node_modules/react-native/ above.\n  \"node_modules/@react-native/\",\n  \"node_modules/react-native-web/\"\n];\nconst REANIMATED_IGNORED_PATHS_REGEX = new RegExp(REANIMATED_IGNORED_PATHS.join(\"|\"));\nfunction shouldTransformWorklets({ id, code }) {\n  if (!isNativeWorkletsEnabled() || !configuration.enableReanimated) {\n    return false;\n  }\n  const normalizedId = id.replace(/\\\\/g, \"/\");\n  if (REANIMATED_IGNORED_PATHS_REGEX.test(normalizedId)) {\n    return false;\n  }\n  return REANIMATED_REGEX.test(code);\n}\nfunction getWorkletsVersion(projectRoot, filename) {\n  if (projectRoot) {\n    try {\n      const req = createRequire(path.resolve(projectRoot, \"package.json\"));\n      try {\n        const ver = req(\"react-native-worklets/package.json\")?.version;\n        if (ver) return ver;\n      } catch {\n      }\n      try {\n        const ver = req(\"react-native-reanimated/package.json\")?.version;\n        if (ver) return ver;\n      } catch {\n      }\n    } catch {\n    }\n    throw new Error(\n      `[@vxrn/compiler] Unable to resolve \"react-native-worklets\" or \"react-native-reanimated\" version from project root \"${projectRoot}\". Please ensure react-native-worklets is installed in your project.`\n    );\n  }\n  if (filename && !filename.startsWith(\"\\0\") && fs.existsSync(filename)) {\n    try {\n      const req = createRequire(filename);\n      try {\n        const ver = req(\"react-native-worklets/package.json\")?.version;\n        if (ver) return ver;\n      } catch {\n      }\n      try {\n        const ver = req(\"react-native-reanimated/package.json\")?.version;\n        if (ver) return ver;\n      } catch {\n      }\n    } catch {\n    }\n  }\n  const fallbacks = [\n    () => createRequire(path.resolve(process.cwd(), \"package.json\")),\n    () => createRequire(import.meta.url)\n  ];\n  for (const getReq of fallbacks) {\n    try {\n      const req = getReq();\n      try {\n        const ver = req(\"react-native-worklets/package.json\")?.version;\n        if (ver) return ver;\n      } catch {\n      }\n      try {\n        const ver = req(\"react-native-reanimated/package.json\")?.version;\n        if (ver) return ver;\n      } catch {\n      }\n    } catch {\n    }\n  }\n  const target = filename || process.cwd();\n  throw new Error(\n    `[@vxrn/compiler] Unable to resolve \"react-native-worklets\" or \"react-native-reanimated\" version from \"${target}\". Please ensure react-native-worklets is installed in your project.`\n  );\n}\nasync function transformWorklets(id, code, sourceMaps = false, options) {\n  if (shouldStripFlow(id, code)) {\n    if (isReactNativeCodegenSpec(id, code)) return { code };\n    const stripped = await stripFlowTypes(id, code, sourceMaps);\n    const result = executeWorkletTransform(\n      id,\n      stripped.code,\n      sourceMaps,\n      options,\n      getWorkletsVersion\n    );\n    if (!sourceMaps || !stripped.map) return result;\n    return {\n      code: result.code,\n      map: result.map ? remapping([result.map, stripped.map], () => null) : stripped.map\n    };\n  }\n  return executeWorkletTransform(id, code, sourceMaps, options, getWorkletsVersion);\n}\nexport {\n  REANIMATED_AUTOWORKLETIZATION_KEYWORDS,\n  getWorkletsVersion,\n  prepareWorkletsForReactCompiler,\n  shouldTransformWorklets,\n  transformWorklets\n};\n//# sourceMappingURL=transformWorklets.js.map\n"],"mappings":"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"}