{
  "version": 3,
  "sources": ["../../../../src/packages/resolve-dependencies/toResolveImporter.ts"],
  "sourcesContent": ["import { logger } from '../logger/index.ts';\nimport { getAllDependenciesFromManifest } from '../manifest-utils/index.ts';\nimport type {\n  PreferredVersions,\n  WorkspacePackages,\n} from '../resolver-base/index.ts';\nimport type { Dependencies, ProjectManifest } from '../types/index.ts';\nimport getVerSelType from 'version-selector-type';\nimport type { ImporterToResolve } from './index.ts';\nimport {\n  getWantedDependencies,\n  type WantedDependency,\n} from './getWantedDependencies.ts';\nimport type { ImporterToResolveGeneric } from './resolveDependencyTree.ts';\nimport { safeIsInnerLink } from './safeIsInnerLink.ts';\nimport { validatePeerDependencies } from './validatePeerDependencies.ts';\nimport type { ProjectOptions, HookOptions } from '../get-context/index.ts';\n\nexport interface ResolveImporter\n  extends ImporterToResolve,\n    ImporterToResolveGeneric<{\n      binsDir: string;\n      isNew?: boolean | undefined;\n      updateDepth?: number | undefined;\n      preserveNonSemverVersionSpec?: boolean | undefined;\n    }> {\n  wantedDependencies: Array<\n    WantedDependency & {\n      binsDir: string;\n      isNew?: boolean | undefined;\n      updateDepth?: number | undefined;\n      preserveNonSemverVersionSpec?: boolean | undefined;\n    }\n  >;\n}\n\nexport async function toResolveImporter(\n  opts: {\n    defaultUpdateDepth: number;\n    lockfileOnly: boolean;\n    preferredVersions?: PreferredVersions | undefined;\n    virtualStoreDir: string;\n    workspacePackages: WorkspacePackages;\n    updateToLatest?: boolean | undefined;\n    noDependencySelectors: boolean;\n  },\n  project: ProjectOptions &\n    HookOptions & {\n      binsDir: string;\n      updatePackageManifest?: boolean | undefined;\n      wantedDependencies?: Array<WantedDependency> | undefined;\n    }\n): Promise<ImporterToResolveGeneric<{\n  isNew?: boolean | undefined;\n  updateDepth?: number | undefined;\n}> | null> {\n  if (typeof project.manifest === 'undefined') {\n    return null;\n  }\n\n  validatePeerDependencies(project);\n\n  const allDeps = getWantedDependencies(project.manifest);\n\n  const nonLinkedDependencies = await partitionLinkedPackages(allDeps, {\n    lockfileOnly: opts.lockfileOnly,\n    modulesDir: project.modulesDir,\n    projectDir: project.rootDir,\n    virtualStoreDir: opts.virtualStoreDir,\n    workspacePackages: opts.workspacePackages,\n  });\n\n  const defaultUpdateDepth =\n    ('update' in project && project.update === true) ||\n    ('updateMatching' in project &&\n      typeof project.updateMatching !== 'undefined')\n      ? opts.defaultUpdateDepth\n      : -1;\n\n  const existingDeps = nonLinkedDependencies.filter(\n    ({ alias }: WantedDependency): boolean => {\n      return (\n        project.wantedDependencies?.some(\n          (wantedDep: WantedDependency): boolean => {\n            return wantedDep.alias === alias;\n          }\n        ) !== true\n      );\n    }\n  );\n\n  if (opts.updateToLatest === true && opts.noDependencySelectors) {\n    for (const dep of existingDeps) {\n      dep.updateSpec = true;\n    }\n  }\n\n  let wantedDependencies:\n    | Array<\n        WantedDependency & {\n          updateDepth?: number | undefined;\n        }\n      >\n    | undefined;\n\n  if (typeof project.manifest === 'undefined') {\n    wantedDependencies = [\n      ...(project.wantedDependencies ?? []),\n      ...existingDeps,\n    ].map(\n      (\n        dep: WantedDependency\n      ): WantedDependency & {\n        updateDepth?: number | undefined;\n      } => {\n        return {\n          ...dep,\n          updateDepth: defaultUpdateDepth,\n        };\n      }\n    );\n  } else {\n    // Direct local tarballs are always checked,\n    // so their update depth should be at least 0\n    function updateLocalTarballs(\n      dep: {\n        isNew?: boolean | undefined;\n        preserveNonSemverVersionSpec?: boolean | undefined;\n      } & WantedDependency\n    ): WantedDependency & {\n      // isNew?: boolean | undefined;\n      updateDepth?: number | undefined;\n      // preserveNonSemverVersionSpec?: boolean | undefined;\n    } {\n      return {\n        ...dep,\n        updateDepth:\n          'updateMatching' in project &&\n          typeof project.updateMatching !== 'undefined'\n            ? defaultUpdateDepth\n            : typeof dep.pref !== 'undefined' && prefIsLocalTarball(dep.pref)\n              ? 0\n              : defaultUpdateDepth,\n      };\n    }\n\n    wantedDependencies = [\n      ...(project.wantedDependencies?.map(\n        defaultUpdateDepth < 0\n          ? updateLocalTarballs\n          : (\n              dep: WantedDependency\n            ): {\n              // isNew?: boolean | undefined;\n              updateDepth?: number | undefined;\n              // preserveNonSemverVersionSpec?: boolean | undefined;\n            } & WantedDependency => {\n              return { ...dep, updateDepth: defaultUpdateDepth };\n            }\n      ) ?? []),\n      ...existingDeps.map(\n        opts.noDependencySelectors &&\n          'updateMatching' in project &&\n          typeof project.updateMatching !== 'undefined'\n          ? updateLocalTarballs\n          : (\n              dep: WantedDependency\n            ): WantedDependency & { updateDepth: number } => {\n              return { ...dep, updateDepth: -1 };\n            }\n      ),\n    ];\n  }\n\n  if (typeof wantedDependencies !== 'undefined') {\n    return {\n      ...project,\n      // TODO: fix binsDir\n      binsDir: '',\n      rootDir: project.rootDir,\n      hasRemovedDependencies: Boolean(\n        'removePackages' in project &&\n          Array.isArray(project.removePackages) &&\n          project.removePackages.length > 0\n      ),\n      preferredVersions:\n        opts.preferredVersions ??\n        (typeof project.manifest === 'undefined'\n          ? {}\n          : getPreferredVersionsFromPackage(project.manifest)),\n      wantedDependencies,\n    };\n  }\n\n  return null;\n}\n\nfunction prefIsLocalTarball(pref: string): boolean {\n  return pref.startsWith('file:') && pref.endsWith('.tgz');\n}\n\nasync function partitionLinkedPackages(\n  dependencies: WantedDependency[],\n  opts: {\n    projectDir: string;\n    lockfileOnly: boolean;\n    modulesDir: string;\n    virtualStoreDir: string;\n    workspacePackages?: WorkspacePackages | undefined;\n  }\n): Promise<WantedDependency[]> {\n  const nonLinkedDependencies: WantedDependency[] = [];\n\n  const linkedAliases = new Set<string>();\n\n  await Promise.all(\n    dependencies.map(async (dependency) => {\n      if (\n        typeof dependency.alias === 'undefined' ||\n        opts.workspacePackages?.get(dependency.alias) != null ||\n        dependency.pref?.startsWith('workspace:') === true\n      ) {\n        nonLinkedDependencies.push(dependency);\n\n        return;\n      }\n      const isInnerLink = await safeIsInnerLink(\n        opts.modulesDir,\n        dependency.alias,\n        {\n          hideAlienModules: !opts.lockfileOnly,\n          projectDir: opts.projectDir,\n          virtualStoreDir: opts.virtualStoreDir,\n        }\n      );\n\n      if (isInnerLink === true) {\n        nonLinkedDependencies.push(dependency);\n        return;\n      }\n\n      if (dependency.pref?.startsWith('link:') !== true) {\n        // This info-log might be better to be moved to the reporter\n        logger.info({\n          message: `${dependency.alias} is linked to ${opts.modulesDir} from ${isInnerLink}`,\n          prefix: opts.projectDir,\n        });\n      }\n\n      linkedAliases.add(dependency.alias);\n    })\n  );\n  return nonLinkedDependencies;\n}\n\nfunction getPreferredVersionsFromPackage(\n  pkg: Pick<\n    ProjectManifest,\n    'devDependencies' | 'dependencies' | 'optionalDependencies'\n  >\n): PreferredVersions {\n  return getVersionSpecsByRealNames(getAllDependenciesFromManifest(pkg));\n}\n\ntype VersionSpecsByRealNames = Record<\n  string,\n  Record<string, 'version' | 'range' | 'tag'>\n>;\n\nfunction getVersionSpecsByRealNames(\n  deps: Dependencies\n): VersionSpecsByRealNames {\n  const acc: VersionSpecsByRealNames = {};\n  for (const depName in deps) {\n    const currentPref = deps[depName];\n\n    if (typeof currentPref === 'undefined') {\n      continue;\n    }\n\n    if (currentPref.startsWith('npm:') === true) {\n      const pref = currentPref.slice(4);\n\n      const index = pref.lastIndexOf('@');\n\n      const spec = pref.slice(index + 1);\n\n      const selector = getVerSelType(spec);\n\n      if (selector != null) {\n        const pkgName = pref.substring(0, index);\n\n        acc[pkgName] = acc[pkgName] || {};\n\n        acc[pkgName][selector.normalized] = selector.type;\n      }\n    } else if (currentPref.includes(':') !== true) {\n      // we really care only about semver specs\n      const selector = getVerSelType(currentPref);\n\n      if (selector != null) {\n        acc[depName] = acc[depName] || {};\n        acc[depName][selector.normalized] = selector.type;\n      }\n    }\n  }\n  return acc;\n}\n"],
  "mappings": "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",
  "names": ["updateLocalTarballs"]
}
