{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-rebuild/recursive.ts"],
  "sourcesContent": ["import assert from 'node:assert';\nimport util from 'node:util';\nimport {\n  type RecursiveSummary,\n  throwOnCommandFail,\n} from '../cli-utils/index.ts';\nimport { type Config, readLocalConfig } from '../config/index.ts';\nimport { logger } from '../logger/index.ts';\nimport { sortPackages } from '../sort-packages/index.ts';\nimport {\n  createOrConnectStoreController,\n  type CreateStoreControllerOptions,\n} from '../store-connection-manager/index.ts';\nimport type {\n  ModulesDir,\n  Project,\n  ProjectId,\n  ProjectManifest,\n  ProjectRootDir,\n} from '../types/index.ts';\nimport mem from 'mem';\nimport pLimit from 'p-limit';\nimport {\n  rebuildProjects as rebuildAll,\n  type RebuildOptions,\n  rebuildSelectedPkgs,\n} from './implementation/index.ts';\nimport { join } from 'node:path';\nimport type { ProjectOptions, HookOptions } from '../get-context/index.ts';\n\ntype RecursiveRebuildOpts = CreateStoreControllerOptions &\n  Pick<\n    Config,\n    | 'hoistPattern'\n    | 'hooks'\n    | 'ignorePnpmfile'\n    | 'ignoreScripts'\n    | 'lockfileDir'\n    | 'lockfileOnly'\n    | 'nodeLinker'\n    | 'rawLocalConfig'\n    | 'registries'\n    | 'rootProjectManifest'\n    | 'rootProjectManifestDir'\n    | 'sharedWorkspaceLockfile'\n  > & {\n    pending?: boolean | undefined;\n  } & Partial<Pick<Config, 'bail' | 'sort' | 'workspaceConcurrency'>>;\n\nexport async function recursiveRebuild(\n  allProjects: Project[],\n  params: string[],\n  opts: RecursiveRebuildOpts & {\n    ignoredPackages?: Set<string> | undefined;\n  } & Required<Pick<Config, 'selectedProjectsGraph' | 'workspaceDir'>>\n): Promise<void> {\n  if (allProjects.length === 0) {\n    // It might make sense to throw an exception in this case\n    return;\n  }\n\n  const pkgs = Object.values(opts.selectedProjectsGraph ?? {}).map(\n    (wsPkg) => wsPkg.package\n  );\n\n  if (pkgs.length === 0) {\n    return;\n  }\n\n  const manifestsByPath: {\n    [dir: string]: Omit<Project, 'rootDir' | 'rootDirRealPath'>;\n  } = {};\n\n  for (const { rootDir, manifest, writeProjectManifest } of pkgs) {\n    manifestsByPath[rootDir] = { manifest, writeProjectManifest };\n  }\n\n  const throwOnFail = throwOnCommandFail.bind(null, 'pnpm recursive rebuild');\n\n  const chunks =\n    opts.sort === true\n      ? sortPackages(opts.selectedProjectsGraph ?? {})\n      : [\n          Object.keys(\n            opts.selectedProjectsGraph ?? {}\n          ).sort() as ProjectRootDir[],\n        ];\n\n  const store = await createOrConnectStoreController(opts);\n\n  const rebuildOpts: RebuildOptions<{\n    isBuilt: boolean;\n    importMethod?: string | undefined;\n  }> = Object.assign(opts, {\n    ownLifecycleHooksStdio: 'pipe',\n    pruneLockfileImporters:\n      (opts.ignoredPackages == null || opts.ignoredPackages.size === 0) &&\n      pkgs.length === allProjects.length,\n    storeController: store.ctrl,\n    storeDir: store.dir,\n    lockfileDir: opts.lockfileDir,\n  });\n\n  const result: RecursiveSummary = {};\n\n  const memReadLocalConfig = mem(readLocalConfig);\n\n  async function getImporters(): Promise<\n    (ProjectOptions & HookOptions & { binsDir: string })[]\n  > {\n    const importers: Array<ProjectOptions & HookOptions & { binsDir: string }> =\n      [];\n\n    await Promise.all(\n      chunks.map(\n        async (\n          prefixes: ProjectRootDir[],\n          buildIndex: number\n        ): Promise<number[]> => {\n          let newPrefixes = prefixes;\n\n          if (typeof opts.ignoredPackages !== 'undefined') {\n            newPrefixes = newPrefixes.filter((prefix: string): boolean => {\n              return opts.ignoredPackages?.has(prefix) !== true;\n            });\n          }\n\n          return Promise.all(\n            newPrefixes.map(async (prefix: ProjectRootDir): Promise<number> => {\n              return importers.push({\n                id: '' as ProjectId,\n                // TODO: fix binsDir\n                binsDir: '',\n                buildIndex,\n                manifest: manifestsByPath[prefix]?.manifest as ProjectManifest,\n                rootDir: prefix,\n                modulesDir: join(prefix, 'node_modules') as ModulesDir,\n              });\n            })\n          );\n        }\n      )\n    );\n\n    return importers;\n  }\n\n  const rebuild =\n    params.length === 0\n      ? rebuildAll\n      : (\n          importers: Array<\n            ProjectOptions &\n              HookOptions & {\n                binsDir: string;\n              }\n          >,\n          opts: RebuildOptions<{\n            isBuilt: boolean;\n            importMethod?: string | undefined;\n          }>\n        ) => {\n          return rebuildSelectedPkgs<{\n            isBuilt: boolean;\n            importMethod?: string | undefined;\n          }>(importers, params, opts);\n        };\n\n  if (typeof opts.lockfileDir === 'string' && opts.lockfileDir !== '') {\n    const importers = await getImporters();\n\n    await rebuild(importers, {\n      ...rebuildOpts,\n      pending: opts.pending === true,\n    });\n\n    return;\n  }\n\n  const limitRebuild = pLimit(opts.workspaceConcurrency ?? 4);\n\n  for (const chunk of chunks) {\n    await Promise.all(\n      chunk.map(async (rootDir: ProjectRootDir): Promise<void> => {\n        return limitRebuild(async (): Promise<void> => {\n          try {\n            if (opts.ignoredPackages?.has(rootDir) === true) {\n              return;\n            }\n\n            result[rootDir] = { status: 'running' };\n\n            const localConfig = await memReadLocalConfig(rootDir);\n\n            await rebuild(\n              [\n                {\n                  // TODO: fix id\n                  id: '' as ProjectId,\n                  // TODO: fix binsDir\n                  binsDir: '',\n                  buildIndex: 0,\n                  // TODO: fix as\n                  manifest: manifestsByPath[rootDir]\n                    ?.manifest as ProjectManifest,\n                  rootDir,\n                  modulesDir: join(rootDir, 'node_modules') as ModulesDir,\n                },\n              ],\n              {\n                ...rebuildOpts,\n                ...localConfig,\n                dir: rootDir,\n                pending: opts.pending === true,\n                rawConfig: {\n                  ...rebuildOpts.rawConfig,\n                  ...localConfig,\n                },\n              }\n            );\n\n            result[rootDir] = {\n              ...result[rootDir],\n              status: 'passed',\n            };\n          } catch (err: unknown) {\n            assert(util.types.isNativeError(err));\n\n            const errWithPrefix = Object.assign(err, {\n              prefix: rootDir,\n            });\n\n            logger.info(errWithPrefix);\n\n            if (opts.bail !== true) {\n              result[rootDir] = {\n                status: 'failure',\n                error: errWithPrefix,\n                message: err.message,\n                prefix: rootDir,\n              };\n              return;\n            }\n\n            throw err;\n          }\n        });\n      })\n    );\n  }\n\n  throwOnFail(result);\n}\n"],
  "mappings": "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",
  "names": ["opts"]
}
