{
  "version": 3,
  "sources": ["../../../../src/packages/exportable-manifest/index.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport {\n  type CatalogResolver,\n  resolveFromCatalog,\n} from '../catalogs.resolver/index.ts';\nimport type { Catalogs } from '../catalogs.types/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport { tryReadProjectManifest } from '../read-project-manifest/index.ts';\nimport type { Dependencies, ProjectManifest } from '../types/index.ts';\nimport omit from 'ramda/src/omit';\nimport pMapValues from 'p-map-values';\nimport { overridePublishConfig } from './overridePublishConfig.ts';\n\nconst PREPUBLISH_SCRIPTS = [\n  'prepublishOnly',\n  'prepack',\n  'prepare',\n  'postpack',\n  'publish',\n  'postpublish',\n];\n\nexport type MakePublishManifestOptions = {\n  catalogs: Catalogs;\n  modulesDir?: string | undefined;\n  readmeFile?: string | undefined;\n};\n\nexport async function createExportableManifest(\n  dir: string,\n  originalManifest: ProjectManifest,\n  opts: MakePublishManifestOptions\n): Promise<ProjectManifest> {\n  const publishManifest: ProjectManifest = omit.default(\n    ['pnpm', 'scripts', 'packageManager'],\n    originalManifest\n  );\n  if (originalManifest.scripts != null) {\n    publishManifest.scripts = omit.default(\n      PREPUBLISH_SCRIPTS,\n      originalManifest.scripts\n    );\n  }\n\n  const catalogResolver = resolveFromCatalog.bind(null, opts.catalogs);\n\n  const replaceCatalogProtocol = resolveCatalogProtocol.bind(\n    null,\n    catalogResolver\n  );\n\n  const convertDependencyForPublish = combineConverters(\n    replaceWorkspaceProtocol,\n    replaceCatalogProtocol\n  );\n\n  await Promise.all(\n    (['dependencies', 'devDependencies', 'optionalDependencies'] as const).map(\n      async (\n        depsField: 'dependencies' | 'devDependencies' | 'optionalDependencies'\n      ) => {\n        const deps = await makePublishDependencies(\n          dir,\n          originalManifest[depsField],\n          {\n            modulesDir: opts.modulesDir ?? 'node_modules',\n            convertDependencyForPublish,\n          }\n        );\n\n        if (deps != null) {\n          publishManifest[depsField] = deps;\n        }\n      }\n    )\n  );\n\n  const peerDependencies = originalManifest.peerDependencies;\n  if (peerDependencies) {\n    const convertPeersForPublish = combineConverters(\n      replaceWorkspaceProtocolPeerDependency,\n      replaceCatalogProtocol\n    );\n    publishManifest.peerDependencies = await makePublishDependencies(\n      dir,\n      peerDependencies,\n      {\n        modulesDir: opts.modulesDir ?? 'node_modules',\n        convertDependencyForPublish: convertPeersForPublish,\n      }\n    );\n  }\n\n  overridePublishConfig(publishManifest);\n\n  if (typeof opts.readmeFile === 'string') {\n    publishManifest.readme ??= opts.readmeFile;\n  }\n\n  return publishManifest;\n}\n\nexport type PublishDependencyConverter = (\n  depName: string,\n  depSpec: string,\n  dir: string,\n  modulesDir?: string | undefined\n) => Promise<string> | string;\n\nfunction combineConverters(\n  ...converters: readonly PublishDependencyConverter[]\n): PublishDependencyConverter {\n  return async (\n    depName: string,\n    depSpec: string,\n    dir: string,\n    modulesDir?: string | undefined\n  ) => {\n    let pref = depSpec;\n\n    for (const converter of converters) {\n      pref = await converter(depName, pref, dir, modulesDir);\n    }\n\n    return pref;\n  };\n}\n\nexport interface MakePublishDependenciesOpts {\n  readonly modulesDir?: string | undefined;\n  readonly convertDependencyForPublish: PublishDependencyConverter;\n}\n\nasync function makePublishDependencies(\n  dir: string,\n  dependencies: Dependencies | undefined,\n  { modulesDir, convertDependencyForPublish }: MakePublishDependenciesOpts\n): Promise<Dependencies | undefined> {\n  if (dependencies == null) {\n    return dependencies;\n  }\n\n  const publishDependencies = await pMapValues.default(\n    async (depSpec: string, depName: string): Promise<string> => {\n      return convertDependencyForPublish(depName, depSpec, dir, modulesDir);\n    },\n    dependencies\n  );\n  return publishDependencies;\n}\n\nasync function readAndCheckManifest(\n  depName: string,\n  dependencyDir: string\n): Promise<ProjectManifest> {\n  const { manifest } = await tryReadProjectManifest(dependencyDir);\n\n  if (typeof manifest?.name === 'undefined' || !manifest.version) {\n    throw new PnpmError(\n      'CANNOT_RESOLVE_WORKSPACE_PROTOCOL',\n      `Cannot resolve workspace protocol of dependency \"${depName}\" because this dependency is not installed. Try running \"pnpm install\".`\n    );\n  }\n\n  return manifest;\n}\n\nfunction resolveCatalogProtocol(\n  catalogResolver: CatalogResolver,\n  alias: string,\n  pref: string\n): string {\n  const result = catalogResolver({ alias, pref });\n\n  switch (result.type) {\n    case 'found': {\n      return result.resolution.specifier;\n    }\n    case 'unused': {\n      return pref;\n    }\n    case 'misconfiguration': {\n      throw result.error;\n    }\n  }\n}\n\nasync function replaceWorkspaceProtocol(\n  depName: string,\n  depSpec: string,\n  dir: string,\n  modulesDir?: string | undefined\n): Promise<string> {\n  if (!depSpec.startsWith('workspace:')) {\n    return depSpec;\n  }\n\n  // Dependencies with bare \"*\", \"^\" and \"~\" versions\n  const versionAliasSpecParts = /^workspace:(.*?)@?([*^~])$/.exec(depSpec);\n\n  if (versionAliasSpecParts != null) {\n    const newModulesDir = modulesDir ?? path.join(dir, 'node_modules');\n\n    const manifest = await readAndCheckManifest(\n      depName,\n      path.join(newModulesDir, depName)\n    );\n\n    const semverRangeToken =\n      versionAliasSpecParts[2] === '*' ? '' : versionAliasSpecParts[2];\n\n    if (depName !== manifest.name) {\n      return `npm:${manifest.name}@${semverRangeToken}${manifest.version}`;\n    }\n\n    return `${semverRangeToken}${manifest.version}`;\n  }\n  if (\n    depSpec.startsWith('workspace:./') ||\n    depSpec.startsWith('workspace:../')\n  ) {\n    const manifest = await readAndCheckManifest(\n      depName,\n      path.join(dir, depSpec.slice(10))\n    );\n\n    if (manifest.name === depName) return `${manifest.version}`;\n\n    return `npm:${manifest.name}@${manifest.version}`;\n  }\n\n  const newDepSpec = depSpec.slice(10);\n\n  if (newDepSpec.includes('@')) {\n    return `npm:${newDepSpec}`;\n  }\n\n  return newDepSpec;\n}\n\nasync function replaceWorkspaceProtocolPeerDependency(\n  depName: string,\n  depSpec: string,\n  dir: string,\n  modulesDir?: string | undefined\n): Promise<string> {\n  if (depSpec.includes('workspace:') !== true) {\n    return depSpec;\n  }\n\n  // Dependencies with bare \"*\", \"^\", \"~\",\">=\",\">\",\"<=\", \"<\", version\n  const workspaceSemverRegex =\n    /workspace:([*^~]|>=|>|<=|<)?((\\d+|[*Xx])(\\.(\\d+|[*Xx])){0,2})?/;\n\n  const versionAliasSpecParts = workspaceSemverRegex.exec(depSpec);\n\n  if (versionAliasSpecParts != null) {\n    const [_, semverRangGroup = '', version] = versionAliasSpecParts;\n\n    if (typeof version === 'string') {\n      return depSpec.replace('workspace:', '');\n    }\n\n    const manifest = await readAndCheckManifest(\n      depName,\n      path.join(modulesDir ?? path.join(dir, 'node_modules'), depName)\n    );\n\n    return depSpec.replace(\n      workspaceSemverRegex,\n      `${semverRangGroup === '*' ? '' : semverRangGroup}${manifest.version}`\n    );\n  }\n\n  return depSpec.replace('workspace:', '');\n}\n"],
  "mappings": "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",
  "names": []
}
