{"ast":null,"code":"'use client';\n\nimport { useRef, useMemo, useEffect } from 'react';\nexport function useReleasingSharedObject(factory, dependencies) {\n  const objectRef = useRef(null);\n  const isFastRefresh = useRef(false);\n  const previousDependencies = useRef(dependencies);\n  if (objectRef.current == null) {\n    objectRef.current = factory();\n  }\n  const object = useMemo(() => {\n    let newObject = objectRef.current;\n    const dependenciesAreEqual = previousDependencies.current?.length === dependencies.length && dependencies.every((value, index) => value === previousDependencies.current[index]);\n    if (!newObject || !dependenciesAreEqual) {\n      objectRef.current?.release();\n      newObject = factory();\n      objectRef.current = newObject;\n      previousDependencies.current = dependencies;\n    } else {\n      isFastRefresh.current = true;\n    }\n    return newObject;\n  }, dependencies);\n  useEffect(() => {\n    isFastRefresh.current = false;\n    return () => {\n      if (!isFastRefresh.current && objectRef.current) {\n        objectRef.current.release();\n      }\n    };\n  }, []);\n  return object;\n}","map":{"version":3,"names":["useRef","useMemo","useEffect","useReleasingSharedObject","factory","dependencies","objectRef","isFastRefresh","previousDependencies","current","object","newObject","dependenciesAreEqual","length","every","value","index","release"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/expo-modules-core/src/hooks/useReleasingSharedObject.ts"],"sourcesContent":["'use client';\n\nimport { DependencyList, useRef, useMemo, useEffect } from 'react';\n\nimport type { SharedObject } from '../ts-declarations/SharedObject';\n\n/**\n * Returns a shared object, which is automatically cleaned up when the component is unmounted.\n */\nexport function useReleasingSharedObject<TSharedObject extends SharedObject>(\n  factory: () => TSharedObject,\n  dependencies: DependencyList\n): TSharedObject {\n  const objectRef = useRef<TSharedObject | null>(null);\n  const isFastRefresh = useRef(false);\n  const previousDependencies = useRef<DependencyList>(dependencies);\n\n  if (objectRef.current == null) {\n    objectRef.current = factory();\n  }\n\n  const object = useMemo(() => {\n    let newObject = objectRef.current;\n    const dependenciesAreEqual =\n      previousDependencies.current?.length === dependencies.length &&\n      dependencies.every((value, index) => value === previousDependencies.current[index]);\n\n    // If the dependencies have changed, release the previous object and create a new one, otherwise this has been called\n    // because of a fast refresh, and we don't want to release the object.\n    if (!newObject || !dependenciesAreEqual) {\n      objectRef.current?.release();\n      newObject = factory();\n      objectRef.current = newObject;\n      previousDependencies.current = dependencies;\n    } else {\n      isFastRefresh.current = true;\n    }\n    return newObject;\n  }, dependencies);\n\n  useEffect(() => {\n    isFastRefresh.current = false;\n\n    return () => {\n      // This will be called on every fast refresh and on unmount, but we only want to release the object on unmount.\n      if (!isFastRefresh.current && objectRef.current) {\n        objectRef.current.release();\n      }\n    };\n  }, []);\n\n  return object;\n}\n"],"mappings":"AAAA,YAAY;;AAEZ,SAAyBA,MAAM,EAAEC,OAAO,EAAEC,SAAS,QAAQ,OAAO;AAOlE,OAAO,SAASC,wBAAwBA,CACtCC,OAA4B,EAC5BC,YAA4B,EACb;EACf,MAAMC,SAAS,GAAGN,MAAM,CAAuB,IAAI,CAAC;EACpD,MAAMO,aAAa,GAAGP,MAAM,CAAC,KAAK,CAAC;EACnC,MAAMQ,oBAAoB,GAAGR,MAAM,CAAiBK,YAAY,CAAC;EAEjE,IAAIC,SAAS,CAACG,OAAO,IAAI,IAAI,EAAE;IAC7BH,SAAS,CAACG,OAAO,GAAGL,OAAO,CAAC,CAAC;EAC/B;EAEA,MAAMM,MAAM,GAAGT,OAAO,CAAC,MAAM;IAC3B,IAAIU,SAAS,GAAGL,SAAS,CAACG,OAAO;IACjC,MAAMG,oBAAoB,GACxBJ,oBAAoB,CAACC,OAAO,EAAEI,MAAM,KAAKR,YAAY,CAACQ,MAAM,IAC5DR,YAAY,CAACS,KAAK,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKD,KAAK,KAAKP,oBAAoB,CAACC,OAAO,CAACO,KAAK,CAAC,CAAC;IAIrF,IAAI,CAACL,SAAS,IAAI,CAACC,oBAAoB,EAAE;MACvCN,SAAS,CAACG,OAAO,EAAEQ,OAAO,CAAC,CAAC;MAC5BN,SAAS,GAAGP,OAAO,CAAC,CAAC;MACrBE,SAAS,CAACG,OAAO,GAAGE,SAAS;MAC7BH,oBAAoB,CAACC,OAAO,GAAGJ,YAAY;IAC7C,CAAC,MAAM;MACLE,aAAa,CAACE,OAAO,GAAG,IAAI;IAC9B;IACA,OAAOE,SAAS;EAClB,CAAC,EAAEN,YAAY,CAAC;EAEhBH,SAAS,CAAC,MAAM;IACdK,aAAa,CAACE,OAAO,GAAG,KAAK;IAE7B,OAAO,MAAM;MAEX,IAAI,CAACF,aAAa,CAACE,OAAO,IAAIH,SAAS,CAACG,OAAO,EAAE;QAC/CH,SAAS,CAACG,OAAO,CAACQ,OAAO,CAAC,CAAC;MAC7B;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOP,MAAM;AACf","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}