{
  "version": 3,
  "sources": ["../../../../src/packages/pnpmfile/requireHooks.ts"],
  "sourcesContent": ["import type {\n  PreResolutionHookContext,\n  PreResolutionHookLogger,\n} from '../hooks.types/index.ts';\nimport { hookLogger } from '../core-loggers/index.ts';\nimport { createHashFromFile } from '../crypto.hash/index.ts';\nimport pathAbsolute from 'path-absolute';\nimport type { CustomFetchers } from '../fetcher-base/index.ts';\nimport type { ImportIndexedPackageAsync } from '../store-controller-types/index.ts';\nimport { getPnpmfilePath } from './getPnpmfilePath.ts';\nimport { requirePnpmfile } from './requirePnpmfile.ts';\nimport type { HookContext, Hooks } from './Hooks.ts';\nimport type { LockfileObject } from '../lockfile.types/index.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Cook<T extends (...args: any[]) => any> = (\n  arg: Parameters<T>[0],\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ...otherArgs: any[]\n) => ReturnType<T>;\n\nexport type CookedHooks = {\n  readPackage?:\n    | Array<Cook<Exclude<Required<Hooks>['readPackage'], undefined>>>\n    | undefined;\n  preResolution?:\n    | Cook<Exclude<Required<Hooks>['preResolution'], undefined>>\n    | undefined;\n  afterAllResolved?:\n    | Array<Cook<Exclude<Required<Hooks>['afterAllResolved'], undefined>>>\n    | undefined;\n  filterLog?:\n    | Array<Cook<Exclude<Required<Hooks>['filterLog'], undefined>>>\n    | undefined;\n  importPackage?: ImportIndexedPackageAsync | undefined;\n  fetchers?: CustomFetchers | undefined;\n  calculatePnpmfileChecksum?: (() => Promise<string | undefined>) | undefined;\n};\n\nexport function requireHooks(\n  prefix: string,\n  opts: {\n    globalPnpmfile?: string | undefined;\n    pnpmfile?: string | undefined;\n  }\n): CookedHooks {\n  const globalPnpmfile =\n    typeof opts.globalPnpmfile === 'string'\n      ? requirePnpmfile(pathAbsolute(opts.globalPnpmfile, prefix), prefix)\n      : undefined;\n\n  let globalHooks: Hooks | undefined = globalPnpmfile?.hooks;\n\n  const pnpmfilePath = getPnpmfilePath(prefix, opts.pnpmfile);\n\n  const pnpmFile = requirePnpmfile(pnpmfilePath, prefix);\n\n  let hooks: Hooks | undefined = pnpmFile?.hooks;\n\n  if (!globalHooks && !hooks) {\n    return { afterAllResolved: [], filterLog: [], readPackage: [] };\n  }\n\n  const calculatePnpmfileChecksum = hooks\n    ? () => createHashFromFile(pnpmfilePath)\n    : undefined;\n\n  globalHooks = globalHooks ?? {};\n\n  hooks = hooks ?? {};\n\n  const cookedHooks: CookedHooks & Required<Pick<CookedHooks, 'filterLog'>> = {\n    afterAllResolved: [],\n    filterLog: [],\n    readPackage: [],\n    calculatePnpmfileChecksum,\n  };\n\n  for (const hookName of ['readPackage', 'afterAllResolved'] as const) {\n    if (globalHooks[hookName]) {\n      const globalHook = globalHooks[hookName];\n\n      const context = createReadPackageHookContext(\n        globalPnpmfile?.filename ?? '',\n        prefix,\n        hookName\n      );\n\n      cookedHooks[hookName]?.push((pkg: LockfileObject) => {\n        return globalHook(pkg, context);\n      });\n    }\n\n    if (hooks[hookName]) {\n      const hook = hooks[hookName];\n      const context = createReadPackageHookContext(\n        pnpmFile?.filename ?? '',\n        prefix,\n        hookName\n      );\n\n      cookedHooks[hookName]?.push((pkg: LockfileObject) => hook(pkg, context));\n    }\n  }\n  if (globalHooks.filterLog != null) {\n    cookedHooks.filterLog?.push(globalHooks.filterLog);\n  }\n  if (hooks.filterLog != null) {\n    cookedHooks.filterLog?.push(hooks.filterLog);\n  }\n\n  // `importPackage`, `preResolution` and `fetchers` can only be defined via a global pnpmfile\n\n  cookedHooks.importPackage = globalHooks.importPackage;\n\n  const preResolutionHook = globalHooks.preResolution;\n\n  cookedHooks.preResolution = preResolutionHook\n    ? (ctx: PreResolutionHookContext) =>\n        preResolutionHook(ctx, createPreResolutionHookLogger(prefix))\n    : undefined;\n\n  cookedHooks.fetchers = globalHooks.fetchers;\n\n  return cookedHooks;\n}\n\nfunction createReadPackageHookContext(\n  calledFrom: string,\n  prefix: string,\n  hook: string\n): HookContext {\n  return {\n    log: (message: string) => {\n      hookLogger.debug({\n        from: calledFrom,\n        hook,\n        message,\n        prefix,\n      });\n    },\n  };\n}\n\nfunction createPreResolutionHookLogger(\n  prefix: string\n): PreResolutionHookLogger {\n  const hook = 'preResolution';\n\n  return {\n    info: (message: string) =>\n      hookLogger.info({ message, prefix, hook } as any), // eslint-disable-line\n    warn: (message: string) =>\n      hookLogger.warn({ message, prefix, hook } as any), // eslint-disable-line\n  };\n}\n"],
  "mappings": "AAIA,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AACnC,OAAO,kBAAkB;AAGzB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AA6BzB,SAAS,aACd,QACA,MAIa;AACb,QAAM,iBACJ,OAAO,KAAK,mBAAmB,WAC3B,gBAAgB,aAAa,KAAK,gBAAgB,MAAM,GAAG,MAAM,IACjE;AAEN,MAAI,cAAiC,gBAAgB;AAErD,QAAM,eAAe,gBAAgB,QAAQ,KAAK,QAAQ;AAE1D,QAAM,WAAW,gBAAgB,cAAc,MAAM;AAErD,MAAI,QAA2B,UAAU;AAEzC,MAAI,CAAC,eAAe,CAAC,OAAO;AAC1B,WAAO,EAAE,kBAAkB,CAAC,GAAG,WAAW,CAAC,GAAG,aAAa,CAAC,EAAE;AAAA,EAChE;AAEA,QAAM,4BAA4B,QAC9B,MAAM,mBAAmB,YAAY,IACrC;AAEJ,gBAAc,eAAe,CAAC;AAE9B,UAAQ,SAAS,CAAC;AAElB,QAAM,cAAsE;AAAA,IAC1E,kBAAkB,CAAC;AAAA,IACnB,WAAW,CAAC;AAAA,IACZ,aAAa,CAAC;AAAA,IACd;AAAA,EACF;AAEA,aAAW,YAAY,CAAC,eAAe,kBAAkB,GAAY;AACnE,QAAI,YAAY,QAAQ,GAAG;AACzB,YAAM,aAAa,YAAY,QAAQ;AAEvC,YAAM,UAAU;AAAA,QACd,gBAAgB,YAAY;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAEA,kBAAY,QAAQ,GAAG,KAAK,CAAC,QAAwB;AACnD,eAAO,WAAW,KAAK,OAAO;AAAA,MAChC,CAAC;AAAA,IACH;AAEA,QAAI,MAAM,QAAQ,GAAG;AACnB,YAAM,OAAO,MAAM,QAAQ;AAC3B,YAAM,UAAU;AAAA,QACd,UAAU,YAAY;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AAEA,kBAAY,QAAQ,GAAG,KAAK,CAAC,QAAwB,KAAK,KAAK,OAAO,CAAC;AAAA,IACzE;AAAA,EACF;AACA,MAAI,YAAY,aAAa,MAAM;AACjC,gBAAY,WAAW,KAAK,YAAY,SAAS;AAAA,EACnD;AACA,MAAI,MAAM,aAAa,MAAM;AAC3B,gBAAY,WAAW,KAAK,MAAM,SAAS;AAAA,EAC7C;AAIA,cAAY,gBAAgB,YAAY;AAExC,QAAM,oBAAoB,YAAY;AAEtC,cAAY,gBAAgB,oBACxB,CAAC,QACC,kBAAkB,KAAK,8BAA8B,MAAM,CAAC,IAC9D;AAEJ,cAAY,WAAW,YAAY;AAEnC,SAAO;AACT;AAEA,SAAS,6BACP,YACA,QACA,MACa;AACb,SAAO;AAAA,IACL,KAAK,CAAC,YAAoB;AACxB,iBAAW,MAAM;AAAA,QACf,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,8BACP,QACyB;AACzB,QAAM,OAAO;AAEb,SAAO;AAAA,IACL,MAAM,CAAC,YACL,WAAW,KAAK,EAAE,SAAS,QAAQ,KAAK,CAAQ;AAAA;AAAA,IAClD,MAAM,CAAC,YACL,WAAW,KAAK,EAAE,SAAS,QAAQ,KAAK,CAAQ;AAAA;AAAA,EACpD;AACF;",
  "names": []
}
