{"version":3,"file":"serialize.js","names":[],"sources":["esm/worklets/serialize.js"],"sourcesContent":["import { transformSync } from \"oxc-transform\";\nimport { bodyStartAfterDirectives } from \"./autoworklet\";\nfunction assertTransformed(transformed, name, what) {\n  const error = transformed.errors?.[0];\n  if (error) {\n    throw new Error(\n      `[worklets] failed to build ${what} code for ${name || \"anonymous worklet\"}: ${error.message || error}`\n    );\n  }\n  if (!transformed.code.trim()) {\n    throw new Error(\n      `[worklets] built empty ${what} code for ${name || \"anonymous worklet\"}`\n    );\n  }\n}\nfunction serializeWorkletForUI(fnNode, code, name, closureVars) {\n  let rawParams = \"\";\n  if (fnNode.params && fnNode.params.length > 0) {\n    const pStart = fnNode.params[0].start;\n    const pEnd = fnNode.params[fnNode.params.length - 1].end;\n    rawParams = code.slice(pStart, pEnd);\n  }\n  let rawBody = \"\";\n  if (fnNode.body.type === \"BlockStatement\") {\n    const bodyStart = bodyStartAfterDirectives(fnNode, code);\n    const bodyEnd = fnNode.body.end - 1;\n    rawBody = code.slice(bodyStart, bodyEnd);\n  } else {\n    rawBody = `return ${code.slice(fnNode.body.start, fnNode.body.end)};`;\n  }\n  const unpacker = closureVars.length > 0 ? `const [${closureVars.join(\", \")}] = this.__closure;\n` : \"\";\n  const asyncPrefix = fnNode.async ? \"async \" : \"\";\n  const genPrefix = fnNode.generator ? \"*\" : \"\";\n  const fnName = name || \"_worklet\";\n  const fullFn = `${asyncPrefix}function${genPrefix} ${fnName}(${rawParams}) {\n${unpacker}${rawBody}\n}`;\n  const transformed = transformSync(\"worklet.ts\", fullFn);\n  assertTransformed(transformed, name, \"serialized\");\n  return `(${transformed.code.trim().replace(/;$/, \"\")})`;\n}\nfunction buildLocalFunction(fnNode, code, name) {\n  let rawParams = \"\";\n  if (fnNode.params && fnNode.params.length > 0) {\n    const pStart = fnNode.params[0].start;\n    const pEnd = fnNode.params[fnNode.params.length - 1].end;\n    rawParams = code.slice(pStart, pEnd);\n  }\n  let rawBody = \"\";\n  if (fnNode.body.type === \"BlockStatement\") {\n    const bodyStart = bodyStartAfterDirectives(fnNode, code);\n    const bodyEnd = fnNode.body.end - 1;\n    rawBody = code.slice(bodyStart, bodyEnd);\n  } else {\n    rawBody = code.slice(fnNode.body.start, fnNode.body.end);\n  }\n  let rawFn = \"\";\n  const asyncPrefix = fnNode.async ? \"async \" : \"\";\n  const genPrefix = fnNode.generator ? \"*\" : \"\";\n  if (fnNode.type === \"ArrowFunctionExpression\") {\n    if (fnNode.body.type === \"BlockStatement\") {\n      rawFn = `${asyncPrefix}(${rawParams}) => {\n${rawBody}\n}`;\n    } else {\n      rawFn = `${asyncPrefix}(${rawParams}) => (${rawBody})`;\n    }\n  } else {\n    rawFn = `${asyncPrefix}function${genPrefix} ${name || \"_worklet\"}(${rawParams}) {\n${rawBody}\n}`;\n  }\n  const transformed = transformSync(\"local.ts\", rawFn);\n  assertTransformed(transformed, name, \"local\");\n  return transformed.code.trim().replace(/;$/, \"\");\n}\nexport {\n  buildLocalFunction,\n  serializeWorkletForUI\n};\n//# sourceMappingURL=serialize.js.map\n"],"mappings":";;;;AAEA,SAAS,kBAAkB,aAAa,MAAM,MAAM;CAClD,MAAM,QAAQ,YAAY,SAAS;CACnC,IAAI,OAAO;EACT,MAAM,IAAI,MACR,8BAA8B,KAAK,YAAY,QAAQ,oBAAoB,IAAI,MAAM,WAAW,OAClG;CACF;CACA,IAAI,CAAC,YAAY,KAAK,KAAK,GAAG;EAC5B,MAAM,IAAI,MACR,0BAA0B,KAAK,YAAY,QAAQ,qBACrD;CACF;AACF;AACA,SAAS,sBAAsB,QAAQ,MAAM,MAAM,aAAa;CAC9D,IAAI,YAAY;CAChB,IAAI,OAAO,UAAU,OAAO,OAAO,SAAS,GAAG;EAC7C,MAAM,SAAS,OAAO,OAAO,EAAE,CAAC;EAChC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,SAAS,EAAE,CAAC;EACrD,YAAY,KAAK,MAAM,QAAQ,IAAI;CACrC;CACA,IAAI,UAAU;CACd,IAAI,OAAO,KAAK,SAAS,kBAAkB;EACzC,MAAM,YAAY,yBAAyB,QAAQ,IAAI;EACvD,MAAM,UAAU,OAAO,KAAK,MAAM;EAClC,UAAU,KAAK,MAAM,WAAW,OAAO;CACzC,OAAO;EACL,UAAU,UAAU,KAAK,MAAM,OAAO,KAAK,OAAO,OAAO,KAAK,GAAG,EAAE;CACrE;CACA,MAAM,WAAW,YAAY,SAAS,IAAI,UAAU,YAAY,KAAK,IAAI,EAAE;IACzE;CACF,MAAM,cAAc,OAAO,QAAQ,WAAW;CAC9C,MAAM,YAAY,OAAO,YAAY,MAAM;CAC3C,MAAM,SAAS,QAAQ;CACvB,MAAM,SAAS,GAAG,YAAY,UAAU,UAAU,GAAG,OAAO,GAAG,UAAU;EACzE,WAAW,QAAQ;;CAEnB,MAAM,cAAc,cAAc,cAAc,MAAM;CACtD,kBAAkB,aAAa,MAAM,YAAY;CACjD,OAAO,IAAI,YAAY,KAAK,KAAK,CAAC,CAAC,QAAQ,MAAM,EAAE,EAAE;AACvD;AACA,SAAS,mBAAmB,QAAQ,MAAM,MAAM;CAC9C,IAAI,YAAY;CAChB,IAAI,OAAO,UAAU,OAAO,OAAO,SAAS,GAAG;EAC7C,MAAM,SAAS,OAAO,OAAO,EAAE,CAAC;EAChC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,SAAS,EAAE,CAAC;EACrD,YAAY,KAAK,MAAM,QAAQ,IAAI;CACrC;CACA,IAAI,UAAU;CACd,IAAI,OAAO,KAAK,SAAS,kBAAkB;EACzC,MAAM,YAAY,yBAAyB,QAAQ,IAAI;EACvD,MAAM,UAAU,OAAO,KAAK,MAAM;EAClC,UAAU,KAAK,MAAM,WAAW,OAAO;CACzC,OAAO;EACL,UAAU,KAAK,MAAM,OAAO,KAAK,OAAO,OAAO,KAAK,GAAG;CACzD;CACA,IAAI,QAAQ;CACZ,MAAM,cAAc,OAAO,QAAQ,WAAW;CAC9C,MAAM,YAAY,OAAO,YAAY,MAAM;CAC3C,IAAI,OAAO,SAAS,2BAA2B;EAC7C,IAAI,OAAO,KAAK,SAAS,kBAAkB;GACzC,QAAQ,GAAG,YAAY,GAAG,UAAU;EACxC,QAAQ;;EAEN,OAAO;GACL,QAAQ,GAAG,YAAY,GAAG,UAAU,QAAQ,QAAQ;EACtD;CACF,OAAO;EACL,QAAQ,GAAG,YAAY,UAAU,UAAU,GAAG,QAAQ,WAAW,GAAG,UAAU;EAChF,QAAQ;;CAER;CACA,MAAM,cAAc,cAAc,YAAY,KAAK;CACnD,kBAAkB,aAAa,MAAM,OAAO;CAC5C,OAAO,YAAY,KAAK,KAAK,CAAC,CAAC,QAAQ,MAAM,EAAE;AACjD"}