{
  "version": 3,
  "sources": ["../../../../src/packages/local-resolver/index.ts"],
  "sourcesContent": ["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { getTarballIntegrity } from '../crypto.hash/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { readProjectManifestOnly } from '../read-project-manifest/index.ts';\nimport type {\n  DirectoryResolution,\n  GenericTarballResolution,\n  ResolveResult,\n  TarballResolution,\n} from '../resolver-base/index.ts';\nimport type { DependencyManifest, LockFileDir } from '../types/index.ts';\nimport { logger } from '../logger/index.ts';\nimport { parsePref, type WantedLocalDependency } from './parsePref.ts';\n\nexport type { WantedLocalDependency };\n\nexport interface ResolveFromLocalResult extends ResolveResult {\n  normalizedPref: string;\n  resolution:\n    | TarballResolution\n    | DirectoryResolution\n    | GenericTarballResolution;\n  manifest?: DependencyManifest | undefined;\n}\n\n/**\n * Resolves a package hosted on the local filesystem\n */\nexport async function resolveFromLocal(\n  wantedDependency: WantedLocalDependency,\n  opts: {\n    lockfileDir?: LockFileDir | undefined;\n    projectDir: string;\n  }\n): Promise<ResolveFromLocalResult | null> {\n  const spec = parsePref(\n    wantedDependency,\n    opts.projectDir,\n    opts.lockfileDir ?? opts.projectDir\n  );\n\n  if (spec == null) {\n    return null;\n  }\n\n  const resolution = {\n    integrity: await getTarballIntegrity(spec.fetchSpec),\n    tarball: spec.id,\n  };\n\n  if (spec.type === 'file') {\n    return {\n      id: spec.id,\n      normalizedPref: spec.normalizedPref,\n      resolution,\n      resolvedVia: 'local-filesystem',\n    };\n  }\n\n  let localDependencyManifest!: DependencyManifest;\n\n  try {\n    localDependencyManifest = await readProjectManifestOnly(spec.fetchSpec);\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (internalErr: any) {\n    if (existsSync(spec.fetchSpec)) {\n      switch (internalErr.code) {\n        case 'ENOTDIR': {\n          throw new PnpmError(\n            'NOT_PACKAGE_DIRECTORY',\n            `Could not install from \"${spec.fetchSpec}\" as it is not a directory.`\n          );\n        }\n\n        case 'ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND':\n        case 'ENOENT': {\n          localDependencyManifest = {\n            name: path.basename(spec.fetchSpec),\n            version: '0.0.0',\n          };\n\n          break;\n        }\n\n        default: {\n          throw internalErr;\n        }\n      }\n    } else {\n      if (spec.id.startsWith('file:') === true) {\n        throw new PnpmError(\n          'LINKED_PKG_DIR_NOT_FOUND',\n          `Could not install from \"${spec.fetchSpec}\" as it does not exist.`\n        );\n      }\n\n      logger.warn({\n        message: `Installing a dependency from a non-existent directory: ${spec.fetchSpec}`,\n        prefix: opts.projectDir,\n      });\n\n      localDependencyManifest = {\n        name: path.basename(spec.fetchSpec),\n        version: '0.0.0',\n      };\n    }\n  }\n\n  return {\n    id: spec.id,\n    manifest: localDependencyManifest,\n    normalizedPref: spec.normalizedPref,\n    resolution: {\n      directory: spec.dependencyPath,\n      type: 'directory',\n    },\n    resolvedVia: 'local-filesystem',\n  };\n}\n"],
  "mappings": "AAAA,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AACjB,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAC1B,SAAS,+BAA+B;AAQxC,SAAS,cAAc;AACvB,SAAS,iBAA6C;AAgBtD,eAAsB,iBACpB,kBACA,MAIwC;AACxC,QAAM,OAAO;AAAA,IACX;AAAA,IACA,KAAK;AAAA,IACL,KAAK,eAAe,KAAK;AAAA,EAC3B;AAEA,MAAI,QAAQ,MAAM;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa;AAAA,IACjB,WAAW,MAAM,oBAAoB,KAAK,SAAS;AAAA,IACnD,SAAS,KAAK;AAAA,EAChB;AAEA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,gBAAgB,KAAK;AAAA,MACrB;AAAA,MACA,aAAa;AAAA,IACf;AAAA,EACF;AAEA,MAAI;AAEJ,MAAI;AACF,8BAA0B,MAAM,wBAAwB,KAAK,SAAS;AAAA,EAGxE,SAAS,aAAkB;AACzB,QAAI,WAAW,KAAK,SAAS,GAAG;AAC9B,cAAQ,YAAY,MAAM;AAAA,QACxB,KAAK,WAAW;AACd,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,2BAA2B,KAAK,SAAS;AAAA,UAC3C;AAAA,QACF;AAAA,QAEA,KAAK;AAAA,QACL,KAAK,UAAU;AACb,oCAA0B;AAAA,YACxB,MAAM,KAAK,SAAS,KAAK,SAAS;AAAA,YAClC,SAAS;AAAA,UACX;AAEA;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,KAAK,GAAG,WAAW,OAAO,MAAM,MAAM;AACxC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,2BAA2B,KAAK,SAAS;AAAA,QAC3C;AAAA,MACF;AAEA,aAAO,KAAK;AAAA,QACV,SAAS,0DAA0D,KAAK,SAAS;AAAA,QACjF,QAAQ,KAAK;AAAA,MACf,CAAC;AAED,gCAA0B;AAAA,QACxB,MAAM,KAAK,SAAS,KAAK,SAAS;AAAA,QAClC,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,UAAU;AAAA,IACV,gBAAgB,KAAK;AAAA,IACrB,YAAY;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,MAAM;AAAA,IACR;AAAA,IACA,aAAa;AAAA,EACf;AACF;",
  "names": []
}
