{
  "version": 3,
  "sources": ["../../../../src/packages/lockfile.walker/index.ts"],
  "sourcesContent": ["import type {\n  LockfileObject,\n  PackageSnapshot,\n} from '../lockfile.types/index.ts';\nimport type { DependenciesField, DepPath, ProjectId } from '../types/index.ts';\nimport * as dp from '../dependency-path/index.ts';\n\nexport type LockedDependency = {\n  depPath: DepPath;\n  pkgSnapshot: PackageSnapshot;\n  next: () => LockfileWalkerStep;\n};\n\nexport type LockfileWalkerStep = {\n  dependencies: LockedDependency[];\n  links: string[];\n  missing: string[];\n};\n\nexport function lockfileWalkerGroupImporterSteps(\n  lockfile: LockfileObject,\n  importerIds: ProjectId[],\n  opts?:\n    | {\n        include?:\n          | { [dependenciesField in DependenciesField]: boolean }\n          | undefined;\n        skipped?: Set<DepPath> | undefined;\n      }\n    | undefined\n): Array<{ importerId: string; step: LockfileWalkerStep }> {\n  const walked = new Set<DepPath>(\n    opts?.skipped != null ? Array.from(opts.skipped) : []\n  );\n\n  return importerIds.map(\n    (\n      importerId: ProjectId\n    ): {\n      importerId: ProjectId;\n      step: LockfileWalkerStep;\n    } => {\n      const projectSnapshot = lockfile.importers?.[importerId];\n\n      const entryNodes = Object.entries({\n        ...(opts?.include?.devDependencies === false\n          ? {}\n          : projectSnapshot?.devDependencies),\n        ...(opts?.include?.dependencies === false\n          ? {}\n          : projectSnapshot?.dependencies),\n        ...(opts?.include?.optionalDependencies === false\n          ? {}\n          : projectSnapshot?.optionalDependencies),\n      })\n        .map(([pkgName, reference]) => dp.refToRelative(reference, pkgName))\n        .filter((nodeId) => nodeId !== null) as DepPath[];\n\n      return {\n        importerId,\n        step: step(\n          {\n            includeOptionalDependencies:\n              opts?.include?.optionalDependencies !== false,\n            lockfile,\n            walked,\n          },\n          entryNodes\n        ),\n      };\n    }\n  );\n}\n\nexport interface LockfileWalker {\n  directDeps: Array<{\n    alias: string;\n    depPath: DepPath;\n  }>;\n  step: LockfileWalkerStep;\n}\n\nexport function lockfileWalker(\n  lockfile: LockfileObject,\n  importerIds: ProjectId[],\n  opts?:\n    | {\n        include?:\n          | { [dependenciesField in DependenciesField]: boolean }\n          | undefined;\n        skipped?: Set<DepPath> | undefined;\n      }\n    | undefined\n): LockfileWalker {\n  const walked = new Set<DepPath>(\n    opts?.skipped != null ? Array.from(opts.skipped) : []\n  );\n  const entryNodes = [] as DepPath[];\n  const directDeps = [] as Array<{ alias: string; depPath: DepPath }>;\n\n  for (const importerId of importerIds) {\n    const projectSnapshot = lockfile.importers?.[importerId];\n\n    const entries = Object.entries({\n      ...(opts?.include?.devDependencies === false\n        ? {}\n        : projectSnapshot?.devDependencies),\n      ...(opts?.include?.dependencies === false\n        ? {}\n        : projectSnapshot?.dependencies),\n      ...(opts?.include?.optionalDependencies === false\n        ? {}\n        : projectSnapshot?.optionalDependencies),\n    });\n\n    for (const [pkgName, reference] of entries) {\n      const depPath = dp.refToRelative(reference, pkgName);\n\n      if (depPath === null) {\n        continue;\n      }\n\n      entryNodes.push(depPath);\n\n      directDeps.push({ alias: pkgName, depPath });\n    }\n  }\n\n  return {\n    directDeps,\n    step: step(\n      {\n        includeOptionalDependencies:\n          opts?.include?.optionalDependencies !== false,\n        lockfile,\n        walked,\n      },\n      entryNodes\n    ),\n  };\n}\n\nfunction step(\n  ctx: {\n    includeOptionalDependencies: boolean;\n    lockfile: LockfileObject;\n    walked: Set<DepPath>;\n  },\n  nextDepPaths: DepPath[]\n): LockfileWalkerStep {\n  const result: LockfileWalkerStep = {\n    dependencies: [],\n    links: [],\n    missing: [],\n  };\n  for (const depPath of nextDepPaths) {\n    if (ctx.walked.has(depPath)) continue;\n    ctx.walked.add(depPath);\n    const pkgSnapshot = ctx.lockfile.packages?.[depPath];\n    if (pkgSnapshot == null) {\n      if (depPath.startsWith('link:')) {\n        result.links.push(depPath);\n        continue;\n      }\n      result.missing.push(depPath);\n      continue;\n    }\n    result.dependencies.push({\n      depPath,\n      next: () =>\n        step(\n          ctx,\n          next(\n            { includeOptionalDependencies: ctx.includeOptionalDependencies },\n            pkgSnapshot\n          )\n        ),\n      pkgSnapshot,\n    });\n  }\n  return result;\n}\n\nfunction next(\n  opts: { includeOptionalDependencies: boolean },\n  nextPkg: PackageSnapshot\n): DepPath[] {\n  return Object.entries({\n    ...nextPkg.dependencies,\n    ...(opts.includeOptionalDependencies ? nextPkg.optionalDependencies : {}),\n  })\n    .map(([pkgName, reference]) => dp.refToRelative(reference, pkgName))\n    .filter((nodeId) => nodeId !== null) as DepPath[];\n}\n"],
  "mappings": "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",
  "names": []
}
