{"version":3,"file":"runHook.js","names":["_decache","data","_interopRequireDefault","require","_resolveFrom","_internal","obj","__esModule","default","requireFromProject","projectRoot","modulePath","fullPath","resolveFrom","decache","prepareHooks","hooks","hookType","validHooks","_hooks$hookType","forEach","hook","file","fn","logger","global","error","_fn","push","undefined","length","XDLError","runHook","hookOptions","result","config","then","info","quiet"],"sources":["../../src/project/runHook.ts"],"sourcesContent":["import { ExpoConfig, Hook, HookArguments, HookType } from '@expo/config';\nimport decache from 'decache';\nimport resolveFrom from 'resolve-from';\n\nimport { Logger as logger, XDLError } from '../internal';\n\nexport type LoadedHook = Hook & {\n  _fn: (input: HookArguments) => any;\n};\n\nfunction requireFromProject(projectRoot: string, modulePath: string) {\n  try {\n    const fullPath = resolveFrom(projectRoot, modulePath);\n    // Clear the require cache for this module so get a fresh version of it\n    // without requiring the user to restart Expo CLI\n    decache(fullPath);\n    return require(fullPath);\n  } catch {\n    return null;\n  }\n}\n\nexport function prepareHooks(hooks: ExpoConfig['hooks'], hookType: HookType, projectRoot: string) {\n  const validHooks: LoadedHook[] = [];\n\n  if (hooks) {\n    if (hooks[hookType]) {\n      hooks[hookType]!.forEach((hook: any) => {\n        const { file } = hook;\n        const fn = requireFromProject(projectRoot, file);\n        if (typeof fn !== 'function') {\n          logger.global.error(\n            `Unable to load ${hookType} hook: '${file}'. The module does not export a function.`\n          );\n        } else {\n          hook._fn = fn;\n          validHooks.push(hook);\n        }\n      });\n    }\n\n    if (hooks[hookType] !== undefined && validHooks.length !== hooks[hookType]?.length) {\n      throw new XDLError(\n        'HOOK_INITIALIZATION_ERROR',\n        `Please fix your ${hookType} hook configuration`\n      );\n    }\n  }\n\n  return validHooks;\n}\n\nexport async function runHook(hook: LoadedHook, hookOptions: Omit<HookArguments, 'config'>) {\n  let result = hook._fn({\n    config: hook.config,\n    ...hookOptions,\n  });\n\n  // If it's a promise, wait for it to resolve\n  if (result && result.then) {\n    result = await result;\n  }\n\n  if (result) {\n    logger.global.info({ quiet: true }, result);\n  }\n}\n"],"mappings":";;;;;;;AACA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,aAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,YAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,UAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,SAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAyD,SAAAC,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAMzD,SAASG,kBAAkBA,CAACC,WAAmB,EAAEC,UAAkB,EAAE;EACnE,IAAI;IACF,MAAMC,QAAQ,GAAG,IAAAC,sBAAW,EAACH,WAAW,EAAEC,UAAU,CAAC;IACrD;IACA;IACA,IAAAG,kBAAO,EAACF,QAAQ,CAAC;IACjB,OAAOT,OAAO,CAACS,QAAQ,CAAC;EAC1B,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEO,SAASG,YAAYA,CAACC,KAA0B,EAAEC,QAAkB,EAAEP,WAAmB,EAAE;EAChG,MAAMQ,UAAwB,GAAG,EAAE;EAEnC,IAAIF,KAAK,EAAE;IAAA,IAAAG,eAAA;IACT,IAAIH,KAAK,CAACC,QAAQ,CAAC,EAAE;MACnBD,KAAK,CAACC,QAAQ,CAAC,CAAEG,OAAO,CAAEC,IAAS,IAAK;QACtC,MAAM;UAAEC;QAAK,CAAC,GAAGD,IAAI;QACrB,MAAME,EAAE,GAAGd,kBAAkB,CAACC,WAAW,EAAEY,IAAI,CAAC;QAChD,IAAI,OAAOC,EAAE,KAAK,UAAU,EAAE;UAC5BC,kBAAM,CAACC,MAAM,CAACC,KAAK,CAChB,kBAAiBT,QAAS,WAAUK,IAAK,2CAC5C,CAAC;QACH,CAAC,MAAM;UACLD,IAAI,CAACM,GAAG,GAAGJ,EAAE;UACbL,UAAU,CAACU,IAAI,CAACP,IAAI,CAAC;QACvB;MACF,CAAC,CAAC;IACJ;IAEA,IAAIL,KAAK,CAACC,QAAQ,CAAC,KAAKY,SAAS,IAAIX,UAAU,CAACY,MAAM,OAAAX,eAAA,GAAKH,KAAK,CAACC,QAAQ,CAAC,cAAAE,eAAA,uBAAfA,eAAA,CAAiBW,MAAM,GAAE;MAClF,MAAM,KAAIC,oBAAQ,EAChB,2BAA2B,EAC1B,mBAAkBd,QAAS,qBAC9B,CAAC;IACH;EACF;EAEA,OAAOC,UAAU;AACnB;AAEO,eAAec,OAAOA,CAACX,IAAgB,EAAEY,WAA0C,EAAE;EAC1F,IAAIC,MAAM,GAAGb,IAAI,CAACM,GAAG,CAAC;IACpBQ,MAAM,EAAEd,IAAI,CAACc,MAAM;IACnB,GAAGF;EACL,CAAC,CAAC;;EAEF;EACA,IAAIC,MAAM,IAAIA,MAAM,CAACE,IAAI,EAAE;IACzBF,MAAM,GAAG,MAAMA,MAAM;EACvB;EAEA,IAAIA,MAAM,EAAE;IACVV,kBAAM,CAACC,MAAM,CAACY,IAAI,CAAC;MAAEC,KAAK,EAAE;IAAK,CAAC,EAAEJ,MAAM,CAAC;EAC7C;AACF"}