{
  "version": 3,
  "sources": ["../../../../src/packages/build-modules/buildSequence.ts"],
  "sourcesContent": ["import { graphSequencer, type Groups } from '../deps.graph-sequencer/index.ts';\nimport type { PatchInfo } from '../patching.types/index.ts';\nimport type {\n  PkgIdWithPatchHash,\n  DepPath,\n  PackageManifest,\n} from '../types/index.ts';\nimport filter from 'ramda/src/filter';\n\nexport type DependenciesGraphNode<T extends string> = {\n  children: Record<string, T>;\n  depPath: DepPath;\n  pkgIdWithPatchHash: PkgIdWithPatchHash;\n  name: string;\n  dir: string;\n  fetchingBundledManifest?:\n    | (() => Promise<PackageManifest | undefined>)\n    | undefined;\n  filesIndexFile?: string | undefined;\n  hasBin: boolean;\n  hasBundledDependencies: boolean;\n  installable?: boolean | undefined;\n  isBuilt: boolean;\n  optional?: boolean | undefined;\n  optionalDependencies: Set<string>;\n\n  // this is a dirty workaround added in https://github.com/pnpm/pnpm/pull/4898\n  requiresBuild?: boolean | undefined; // any\n  patch?: PatchInfo | undefined;\n};\n\nexport type DependenciesGraph<T extends string> = Record<\n  T,\n  DependenciesGraphNode<T>\n>;\n\nexport function buildSequence<T extends string>(\n  depGraph: Record<\n    string,\n    Pick<DependenciesGraphNode<T>, 'children' | 'requiresBuild'>\n  >,\n  rootDepPaths: T[]\n): Groups<string> {\n  const nodesToBuild = new Set<string>();\n\n  getSubgraphToBuild(depGraph, rootDepPaths, nodesToBuild, new Set<T>());\n  const onlyFromBuildGraph = filter.default((depPath: T): boolean => {\n    return nodesToBuild.has(depPath);\n  });\n\n  const nodesToBuildArray = Array.from(nodesToBuild);\n\n  const graph = new Map(\n    nodesToBuildArray.map((depPath: string): [string, string[]] => {\n      return [\n        depPath,\n        onlyFromBuildGraph(Object.values(depGraph[depPath]?.children ?? {})),\n      ];\n    })\n  );\n\n  const graphSequencerResult = graphSequencer(graph, nodesToBuildArray);\n\n  return graphSequencerResult.chunks;\n}\n\nfunction getSubgraphToBuild<T extends string>(\n  graph: Record<\n    string,\n    Pick<DependenciesGraphNode<T>, 'children' | 'requiresBuild' | 'patch'>\n  >,\n  entryNodes: T[],\n  nodesToBuild: Set<T>,\n  walked: Set<T>\n): boolean {\n  let currentShouldBeBuilt = false;\n\n  for (const depPath of entryNodes) {\n    const node = graph[depPath];\n\n    // packages that are already in node_modules are skipped\n    if (!node) {\n      continue;\n    }\n\n    if (walked.has(depPath)) {\n      continue;\n    }\n\n    walked.add(depPath);\n\n    const childShouldBeBuilt =\n      getSubgraphToBuild(\n        graph,\n        Object.values(node.children),\n        nodesToBuild,\n        walked\n      ) ||\n      node.requiresBuild === true ||\n      node.patch != null;\n\n    if (childShouldBeBuilt) {\n      nodesToBuild.add(depPath);\n      currentShouldBeBuilt = true;\n    }\n  }\n\n  return currentShouldBeBuilt;\n}\n"],
  "mappings": "AAAA,SAAS,sBAAmC;AAO5C,OAAO,YAAY;AA6BZ,SAAS,cACd,UAIA,cACgB;AAChB,QAAM,eAAe,oBAAI,IAAY;AAErC,qBAAmB,UAAU,cAAc,cAAc,oBAAI,IAAO,CAAC;AACrE,QAAM,qBAAqB,OAAO,QAAQ,CAAC,YAAwB;AACjE,WAAO,aAAa,IAAI,OAAO;AAAA,EACjC,CAAC;AAED,QAAM,oBAAoB,MAAM,KAAK,YAAY;AAEjD,QAAM,QAAQ,IAAI;AAAA,IAChB,kBAAkB,IAAI,CAAC,YAAwC;AAC7D,aAAO;AAAA,QACL;AAAA,QACA,mBAAmB,OAAO,OAAO,SAAS,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;AAAA,MACrE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,uBAAuB,eAAe,OAAO,iBAAiB;AAEpE,SAAO,qBAAqB;AAC9B;AAEA,SAAS,mBACP,OAIA,YACA,cACA,QACS;AACT,MAAI,uBAAuB;AAE3B,aAAW,WAAW,YAAY;AAChC,UAAM,OAAO,MAAM,OAAO;AAG1B,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AAEA,QAAI,OAAO,IAAI,OAAO,GAAG;AACvB;AAAA,IACF;AAEA,WAAO,IAAI,OAAO;AAElB,UAAM,qBACJ;AAAA,MACE;AAAA,MACA,OAAO,OAAO,KAAK,QAAQ;AAAA,MAC3B;AAAA,MACA;AAAA,IACF,KACA,KAAK,kBAAkB,QACvB,KAAK,SAAS;AAEhB,QAAI,oBAAoB;AACtB,mBAAa,IAAI,OAAO;AACxB,6BAAuB;AAAA,IACzB;AAAA,EACF;AAEA,SAAO;AACT;",
  "names": []
}
