{
  "version": 3,
  "sources": ["../../../../src/packages/pnpmfile/requirePnpmfile.ts"],
  "sourcesContent": ["import assert from 'node:assert';\nimport fs from 'node:fs';\nimport util from 'node:util';\nimport { PnpmError } from '../error/index.ts';\nimport { logger } from '../logger/index.ts';\nimport type { PackageManifest } from '../types/index.ts';\nimport chalk from 'chalk';\nimport type { Hooks } from './Hooks.ts';\nimport process from 'node:process';\n\nexport class BadReadPackageHookError extends PnpmError {\n  readonly pnpmfile: string;\n\n  constructor(pnpmfile: string, message: string) {\n    super(\n      'BAD_READ_PACKAGE_HOOK_RESULT',\n      `${message} Hook imported via ${pnpmfile}`\n    );\n    this.pnpmfile = pnpmfile;\n  }\n}\n\nclass PnpmFileFailError extends PnpmError {\n  readonly pnpmfile: string;\n  readonly originalError: Error;\n\n  constructor(pnpmfile: string, originalError: Error) {\n    super(\n      'PNPMFILE_FAIL',\n      `Error during pnpmfile execution. pnpmfile: \"${pnpmfile}\". Error: \"${originalError.message}\".`\n    );\n    this.pnpmfile = pnpmfile;\n    this.originalError = originalError;\n  }\n}\n\nexport type Pnpmfile = {\n  hooks?: Hooks | undefined;\n  filename: string;\n};\n\nexport function requirePnpmfile(\n  pnpmFilePath: string,\n  prefix: string\n): Pnpmfile | undefined {\n  try {\n    const pnpmfile: {\n      hooks?: { readPackage?: unknown | undefined } | undefined;\n      filename?: unknown | undefined;\n    } = require(pnpmFilePath); // eslint-disable-line\n    if (typeof pnpmfile === 'undefined') {\n      logger.warn({\n        message: `Ignoring the pnpmfile at \"${pnpmFilePath}\". It exports \"undefined\".`,\n        prefix,\n      });\n\n      return undefined;\n    }\n\n    if (\n      typeof pnpmfile.hooks?.readPackage !== 'undefined' &&\n      typeof pnpmfile.hooks.readPackage !== 'function'\n    ) {\n      throw new TypeError('hooks.readPackage should be a function');\n    }\n\n    if (typeof pnpmfile.hooks?.readPackage === 'function') {\n      const readPackage = pnpmfile.hooks.readPackage;\n\n      pnpmfile.hooks.readPackage = async (\n        pkg: PackageManifest,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        ...args: any[]\n      ) => {\n        pkg.dependencies = pkg.dependencies ?? {};\n        pkg.devDependencies = pkg.devDependencies ?? {};\n        pkg.optionalDependencies = pkg.optionalDependencies ?? {};\n        pkg.peerDependencies = pkg.peerDependencies ?? {};\n        const newPkg = await readPackage(pkg, ...args);\n\n        // TODO: valibot schema\n        // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n        if (!newPkg) {\n          throw new BadReadPackageHookError(\n            pnpmFilePath,\n            'readPackage hook did not return a package manifest object.'\n          );\n        }\n\n        const dependencies = [\n          'dependencies',\n          'optionalDependencies',\n          'peerDependencies',\n        ];\n\n        for (const dep of dependencies) {\n          // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n          if (newPkg[dep] && typeof newPkg[dep] !== 'object') {\n            throw new BadReadPackageHookError(\n              pnpmFilePath,\n              `readPackage hook returned package manifest object's property '${dep}' must be an object.`\n            );\n          }\n        }\n\n        return newPkg;\n      };\n    }\n\n    pnpmfile.filename = pnpmFilePath;\n\n    return pnpmfile as Pnpmfile;\n  } catch (err: unknown) {\n    if (err instanceof SyntaxError) {\n      console.error(chalk.red('A syntax error in the .pnpmfile.cjs\\n'));\n      console.error(err);\n\n      // eslint-disable-next-line n/no-process-exit\n      process.exit(1);\n    }\n    assert(util.types.isNativeError(err));\n    if (\n      !('code' in err && err.code === 'MODULE_NOT_FOUND') ||\n      pnpmFileExistsSync(pnpmFilePath)\n    ) {\n      throw new PnpmFileFailError(pnpmFilePath, err);\n    }\n    return undefined;\n  }\n}\n\nfunction pnpmFileExistsSync(pnpmFilePath: string): boolean {\n  const pnpmFileRealName = pnpmFilePath.endsWith('.cjs')\n    ? pnpmFilePath\n    : `${pnpmFilePath}.cjs`;\n  return fs.existsSync(pnpmFileRealName);\n}\n"],
  "mappings": "AAAA,OAAO,YAAY;AACnB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AAEvB,OAAO,WAAW;AAElB,OAAO,aAAa;AAEb,MAAM,gCAAgC,UAAU;AAAA,EAC5C;AAAA,EAET,YAAY,UAAkB,SAAiB;AAC7C;AAAA,MACE;AAAA,MACA,GAAG,OAAO,sBAAsB,QAAQ;AAAA,IAC1C;AACA,SAAK,WAAW;AAAA,EAClB;AACF;AAEA,MAAM,0BAA0B,UAAU;AAAA,EAC/B;AAAA,EACA;AAAA,EAET,YAAY,UAAkB,eAAsB;AAClD;AAAA,MACE;AAAA,MACA,+CAA+C,QAAQ,cAAc,cAAc,OAAO;AAAA,IAC5F;AACA,SAAK,WAAW;AAChB,SAAK,gBAAgB;AAAA,EACvB;AACF;AAOO,SAAS,gBACd,cACA,QACsB;AACtB,MAAI;AACF,UAAM,WAGF,QAAQ,YAAY;AACxB,QAAI,OAAO,aAAa,aAAa;AACnC,aAAO,KAAK;AAAA,QACV,SAAS,6BAA6B,YAAY;AAAA,QAClD;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAEA,QACE,OAAO,SAAS,OAAO,gBAAgB,eACvC,OAAO,SAAS,MAAM,gBAAgB,YACtC;AACA,YAAM,IAAI,UAAU,wCAAwC;AAAA,IAC9D;AAEA,QAAI,OAAO,SAAS,OAAO,gBAAgB,YAAY;AACrD,YAAM,cAAc,SAAS,MAAM;AAEnC,eAAS,MAAM,cAAc,OAC3B,QAEG,SACA;AACH,YAAI,eAAe,IAAI,gBAAgB,CAAC;AACxC,YAAI,kBAAkB,IAAI,mBAAmB,CAAC;AAC9C,YAAI,uBAAuB,IAAI,wBAAwB,CAAC;AACxD,YAAI,mBAAmB,IAAI,oBAAoB,CAAC;AAChD,cAAM,SAAS,MAAM,YAAY,KAAK,GAAG,IAAI;AAI7C,YAAI,CAAC,QAAQ;AACX,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,cAAM,eAAe;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,mBAAW,OAAO,cAAc;AAE9B,cAAI,OAAO,GAAG,KAAK,OAAO,OAAO,GAAG,MAAM,UAAU;AAClD,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,iEAAiE,GAAG;AAAA,YACtE;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,aAAS,WAAW;AAEpB,WAAO;AAAA,EACT,SAAS,KAAc;AACrB,QAAI,eAAe,aAAa;AAC9B,cAAQ,MAAM,MAAM,IAAI,uCAAuC,CAAC;AAChE,cAAQ,MAAM,GAAG;AAGjB,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,WAAO,KAAK,MAAM,cAAc,GAAG,CAAC;AACpC,QACE,EAAE,UAAU,OAAO,IAAI,SAAS,uBAChC,mBAAmB,YAAY,GAC/B;AACA,YAAM,IAAI,kBAAkB,cAAc,GAAG;AAAA,IAC/C;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBAAmB,cAA+B;AACzD,QAAM,mBAAmB,aAAa,SAAS,MAAM,IACjD,eACA,GAAG,YAAY;AACnB,SAAO,GAAG,WAAW,gBAAgB;AACvC;",
  "names": []
}
