{"version":3,"sources":["../src/isolate.ts","../src/lib/config.ts","../src/lib/logger.ts","../src/lib/utils/get-dirname.ts","../src/lib/utils/get-error-message.ts","../src/lib/utils/inspect-value.ts","../src/lib/utils/is-rush-workspace.ts","../src/lib/utils/json.ts","../src/lib/utils/log-paths.ts","../src/lib/utils/pack.ts","../src/lib/package-manager/index.ts","../src/lib/package-manager/helpers/infer-from-files.ts","../src/lib/utils/get-major-version.ts","../src/lib/package-manager/names.ts","../src/lib/package-manager/helpers/infer-from-manifest.ts","../src/lib/utils/unpack.ts","../src/lib/utils/yaml.ts","../src/lib/lockfile/helpers/generate-npm-lockfile.ts","../src/lib/lockfile/helpers/load-npm-config.ts","../src/lib/lockfile/helpers/generate-pnpm-lockfile.ts","../src/lib/lockfile/helpers/pnpm-map-importer.ts","../src/lib/lockfile/helpers/generate-yarn-lockfile.ts","../src/lib/lockfile/process-lockfile.ts","../src/lib/manifest/adapt-target-package-manifest.ts","../src/lib/manifest/helpers/adapt-internal-package-manifests.ts","../src/lib/manifest/io.ts","../src/lib/manifest/helpers/patch-internal-entries.ts","../src/lib/manifest/helpers/adapt-manifest-internal-deps.ts","../src/lib/manifest/helpers/adopt-pnpm-fields-from-root.ts","../src/lib/manifest/validate-manifest.ts","../src/lib/output/get-build-output-dir.ts","../src/lib/output/pack-dependencies.ts","../src/lib/output/process-build-output-files.ts","../src/lib/output/unpack-dependencies.ts","../src/lib/registry/create-packages-registry.ts","../src/lib/registry/helpers/find-packages-globs.ts","../src/lib/registry/list-internal-packages.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport { unique } from \"remeda\";\nimport type { IsolateConfig } from \"./lib/config\";\nimport { resolveConfig } from \"./lib/config\";\nimport { processLockfile } from \"./lib/lockfile\";\nimport { setLogLevel, useLogger } from \"./lib/logger\";\nimport {\n  adaptInternalPackageManifests,\n  adaptTargetPackageManifest,\n  readManifest,\n  validateManifestMandatoryFields,\n  writeManifest,\n} from \"./lib/manifest\";\nimport {\n  getBuildOutputDir,\n  packDependencies,\n  processBuildOutputFiles,\n  unpackDependencies,\n} from \"./lib/output\";\nimport { detectPackageManager, shouldUsePnpmPack } from \"./lib/package-manager\";\nimport { getVersion } from \"./lib/package-manager/helpers/infer-from-files\";\nimport { createPackagesRegistry, listInternalPackages } from \"./lib/registry\";\nimport type { PackageManifest } from \"./lib/types\";\nimport {\n  getDirname,\n  getRootRelativeLogPath,\n  isRushWorkspace,\n  readTypedJson,\n  writeTypedYamlSync,\n} from \"./lib/utils\";\n\nconst __dirname = getDirname(import.meta.url);\n\nexport function createIsolator(config?: IsolateConfig) {\n  const resolvedConfig = resolveConfig(config);\n\n  return async function isolate(): Promise<string> {\n    const config = resolvedConfig;\n    setLogLevel(config.logLevel);\n    const log = useLogger();\n\n    const { version: libraryVersion } = await readTypedJson<PackageManifest>(\n      path.join(path.join(__dirname, \"..\", \"package.json\"))\n    );\n\n    log.debug(\"Using isolate-package version\", libraryVersion);\n\n    /**\n     * If a targetPackagePath is set, we assume the configuration lives in the\n     * root of the workspace. If targetPackagePath is undefined (the default),\n     * we assume that the configuration lives in the target package directory.\n     */\n    const targetPackageDir = config.targetPackagePath\n      ? path.join(process.cwd(), config.targetPackagePath)\n      : process.cwd();\n\n    const workspaceRootDir = config.targetPackagePath\n      ? process.cwd()\n      : path.join(targetPackageDir, config.workspaceRoot);\n\n    const buildOutputDir = await getBuildOutputDir({\n      targetPackageDir,\n      buildDirName: config.buildDirName,\n      tsconfigPath: config.tsconfigPath,\n    });\n\n    assert(\n      fs.existsSync(buildOutputDir),\n      `Failed to find build output path at ${buildOutputDir}. Please make sure you build the source before isolating it.`\n    );\n\n    log.debug(\"Workspace root resolved to\", workspaceRootDir);\n    log.debug(\n      \"Isolate target package\",\n      getRootRelativeLogPath(targetPackageDir, workspaceRootDir)\n    );\n\n    const isolateDir = path.join(targetPackageDir, config.isolateDirName);\n\n    log.debug(\n      \"Isolate output directory\",\n      getRootRelativeLogPath(isolateDir, workspaceRootDir)\n    );\n\n    if (fs.existsSync(isolateDir)) {\n      await fs.remove(isolateDir);\n      log.debug(\"Cleaned the existing isolate output directory\");\n    }\n\n    await fs.ensureDir(isolateDir);\n\n    const tmpDir = path.join(isolateDir, \"__tmp\");\n    await fs.ensureDir(tmpDir);\n\n    const targetPackageManifest = await readTypedJson<PackageManifest>(\n      path.join(targetPackageDir, \"package.json\")\n    );\n\n    /** Validate mandatory fields for the target package */\n    validateManifestMandatoryFields(\n      targetPackageManifest,\n      getRootRelativeLogPath(targetPackageDir, workspaceRootDir)\n    );\n\n    const packageManager = detectPackageManager(workspaceRootDir);\n\n    log.debug(\n      \"Detected package manager\",\n      packageManager.name,\n      packageManager.version\n    );\n\n    if (shouldUsePnpmPack()) {\n      log.debug(\"Use PNPM pack instead of NPM pack\");\n    }\n\n    /**\n     * Build a packages registry so we can find the workspace packages by name\n     * and have access to their manifest files and relative paths.\n     */\n    const packagesRegistry = await createPackagesRegistry(\n      workspaceRootDir,\n      config.workspacePackages\n    );\n\n    const internalPackageNames = listInternalPackages(\n      targetPackageManifest,\n      packagesRegistry,\n      {\n        includeDevDependencies: config.includeDevDependencies,\n      }\n    );\n\n    /**\n     * Get the list of packages that are production dependencies (not dev-only).\n     * These packages require full validation including the files field.\n     */\n    const productionInternalPackageNames = listInternalPackages(\n      targetPackageManifest,\n      packagesRegistry,\n      {\n        includeDevDependencies: false,\n      }\n    );\n\n    /** Validate mandatory fields for all internal packages that will be isolated */\n    for (const packageName of internalPackageNames) {\n      const packageDef = packagesRegistry[packageName];\n      const isProductionDependency =\n        productionInternalPackageNames.includes(packageName);\n      validateManifestMandatoryFields(\n        packageDef.manifest,\n        getRootRelativeLogPath(packageDef.absoluteDir, workspaceRootDir),\n        isProductionDependency\n      );\n    }\n\n    const packedFilesByName = await packDependencies({\n      internalPackageNames,\n      packagesRegistry,\n      packDestinationDir: tmpDir,\n    });\n\n    await unpackDependencies(\n      packedFilesByName,\n      packagesRegistry,\n      tmpDir,\n      isolateDir\n    );\n\n    /** Adapt the manifest files for all the unpacked local dependencies */\n    await adaptInternalPackageManifests({\n      internalPackageNames,\n      packagesRegistry,\n      isolateDir,\n      forceNpm: config.forceNpm,\n    });\n\n    /** Pack the target package directory, and unpack it in the isolate location */\n    await processBuildOutputFiles({\n      targetPackageDir,\n      tmpDir,\n      isolateDir,\n    });\n\n    /**\n     * Copy the target manifest file to the isolate location and adapt its\n     * workspace dependencies to point to the isolated packages.\n     */\n    const outputManifest = await adaptTargetPackageManifest({\n      manifest: targetPackageManifest,\n      packagesRegistry,\n      workspaceRootDir,\n      config,\n    });\n\n    await writeManifest(isolateDir, outputManifest);\n\n    /** Generate an isolated lockfile based on the original one */\n    const usedFallbackToNpm = await processLockfile({\n      workspaceRootDir,\n      isolateDir,\n      packagesRegistry,\n      internalDepPackageNames: internalPackageNames,\n      targetPackageDir,\n      targetPackageName: targetPackageManifest.name,\n      targetPackageManifest: outputManifest,\n      config,\n    });\n\n    if (usedFallbackToNpm) {\n      /**\n       * When we fall back to NPM, we set the manifest package manager to the\n       * available NPM version.\n       */\n      const manifest = await readManifest(isolateDir);\n\n      const npmVersion = getVersion(\"npm\");\n      manifest.packageManager = `npm@${npmVersion}`;\n\n      await writeManifest(isolateDir, manifest);\n    }\n\n    if (packageManager.name === \"pnpm\" && !config.forceNpm) {\n      /**\n       * PNPM doesn't install dependencies of packages that are linked via link:\n       * or file: specifiers. It requires the directory to be configured as a\n       * workspace, so we copy the workspace config file to the isolate output.\n       *\n       * Rush doesn't have a pnpm-workspace.yaml file, so we generate one.\n       */\n      if (isRushWorkspace(workspaceRootDir)) {\n        const packagesFolderNames = unique(\n          internalPackageNames.map(\n            (name) => path.parse(packagesRegistry[name].rootRelativeDir).dir\n          )\n        );\n\n        log.debug(\"Generating pnpm-workspace.yaml for Rush workspace\");\n        log.debug(\"Packages folder names:\", packagesFolderNames);\n\n        const packages = packagesFolderNames.map((x) => path.join(x, \"/*\"));\n\n        await writeTypedYamlSync(path.join(isolateDir, \"pnpm-workspace.yaml\"), {\n          packages,\n        });\n      } else {\n        fs.copyFileSync(\n          path.join(workspaceRootDir, \"pnpm-workspace.yaml\"),\n          path.join(isolateDir, \"pnpm-workspace.yaml\")\n        );\n      }\n    }\n\n    /**\n     * If there is an .npmrc file in the workspace root, copy it to the isolate\n     * because the settings there could affect how the lockfile is resolved.\n     * Note that .npmrc is used by both NPM and PNPM for configuration.\n     *\n     * See also: https://pnpm.io/npmrc\n     */\n    const npmrcPath = path.join(workspaceRootDir, \".npmrc\");\n\n    if (fs.existsSync(npmrcPath)) {\n      fs.copyFileSync(npmrcPath, path.join(isolateDir, \".npmrc\"));\n      log.debug(\"Copied .npmrc file to the isolate output\");\n    }\n\n    /**\n     * Clean up. Only do this when things succeed, so we can look at the temp\n     * folder in case something goes wrong.\n     */\n    log.debug(\n      \"Deleting temp directory\",\n      getRootRelativeLogPath(tmpDir, workspaceRootDir)\n    );\n    await fs.remove(tmpDir);\n\n    log.debug(\"Isolate completed at\", isolateDir);\n\n    return isolateDir;\n  };\n}\n\n// Keep the original function for backward compatibility\nexport async function isolate(config?: IsolateConfig): Promise<string> {\n  return createIsolator(config)();\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { isEmpty } from \"remeda\";\nimport { setLogLevel, useLogger } from \"./logger\";\nimport { inspectValue, readTypedJsonSync } from \"./utils\";\n\nexport type IsolateConfigResolved = {\n  buildDirName?: string;\n  includeDevDependencies: boolean;\n  includePatchedDependencies: boolean;\n  isolateDirName: string;\n  logLevel: \"info\" | \"debug\" | \"warn\" | \"error\";\n  targetPackagePath?: string;\n  tsconfigPath: string;\n  workspacePackages?: string[];\n  workspaceRoot: string;\n  forceNpm: boolean;\n  pickFromScripts?: string[];\n  omitFromScripts?: string[];\n  omitPackageManager?: boolean;\n};\n\nexport type IsolateConfig = Partial<IsolateConfigResolved>;\n\nconst configDefaults: IsolateConfigResolved = {\n  buildDirName: undefined,\n  includeDevDependencies: false,\n  includePatchedDependencies: false,\n  isolateDirName: \"isolate\",\n  logLevel: \"info\",\n  targetPackagePath: undefined,\n  tsconfigPath: \"./tsconfig.json\",\n  workspacePackages: undefined,\n  workspaceRoot: \"../..\",\n  forceNpm: false,\n  pickFromScripts: undefined,\n  omitFromScripts: undefined,\n  omitPackageManager: false,\n};\n\nconst validConfigKeys = Object.keys(configDefaults);\nconst CONFIG_FILE_NAME = \"isolate.config.json\";\n\nexport type LogLevel = IsolateConfigResolved[\"logLevel\"];\n\nfunction loadConfigFromFile(): IsolateConfig {\n  const configFilePath = path.join(process.cwd(), CONFIG_FILE_NAME);\n  return fs.existsSync(configFilePath)\n    ? readTypedJsonSync<IsolateConfig>(configFilePath)\n    : {};\n}\n\nfunction validateConfig(config: IsolateConfig) {\n  const log = useLogger();\n  const foreignKeys = Object.keys(config).filter(\n    (key) => !validConfigKeys.includes(key)\n  );\n\n  if (!isEmpty(foreignKeys)) {\n    log.warn(`Found invalid config settings:`, foreignKeys.join(\", \"));\n  }\n}\n\nexport function resolveConfig(\n  initialConfig?: IsolateConfig\n): IsolateConfigResolved {\n  setLogLevel(process.env.DEBUG_ISOLATE_CONFIG ? \"debug\" : \"info\");\n  const log = useLogger();\n\n  const userConfig = initialConfig ?? loadConfigFromFile();\n\n  if (initialConfig) {\n    log.debug(`Using user defined config:`, inspectValue(initialConfig));\n  } else {\n    log.debug(`Loaded config from ${CONFIG_FILE_NAME}`);\n  }\n\n  validateConfig(userConfig);\n\n  if (userConfig.logLevel) {\n    setLogLevel(userConfig.logLevel);\n  }\n\n  const config = {\n    ...configDefaults,\n    ...userConfig,\n  } satisfies IsolateConfigResolved;\n\n  log.debug(\"Using configuration:\", inspectValue(config));\n\n  return config;\n}\n","import chalk from \"chalk\";\nimport type { IsolateConfigResolved, LogLevel } from \"./config\";\n/**\n * The Logger defines an interface that can be used to pass in a different\n * logger object in order to intercept all the logging output. We keep the\n * handlers separate from the logger object itself, so that we can change the\n * handlers but do not bother the user with having to handle logLevel.\n */\nexport type Logger = {\n  debug(...args: unknown[]): void;\n  info(...args: unknown[]): void;\n  warn(...args: unknown[]): void;\n  error(...args: unknown[]): void;\n};\n\nlet _loggerHandlers: Logger = {\n  debug(...args: unknown[]) {\n    console.log(chalk.blue(\"debug\"), ...args);\n  },\n  info(...args: unknown[]) {\n    console.log(chalk.green(\"info\"), ...args);\n  },\n  warn(...args: unknown[]) {\n    console.log(chalk.yellow(\"warning\"), ...args);\n  },\n  error(...args: unknown[]) {\n    console.log(chalk.red(\"error\"), ...args);\n  },\n};\n\nconst _logger: Logger = {\n  debug(...args: unknown[]) {\n    if (_logLevel === \"debug\") {\n      _loggerHandlers.debug(...args);\n    }\n  },\n  info(...args: unknown[]) {\n    if (_logLevel === \"debug\" || _logLevel === \"info\") {\n      _loggerHandlers.info(...args);\n    }\n  },\n  warn(...args: unknown[]) {\n    if (_logLevel === \"debug\" || _logLevel === \"info\" || _logLevel === \"warn\") {\n      _loggerHandlers.warn(...args);\n    }\n  },\n  error(...args: unknown[]) {\n    _loggerHandlers.error(...args);\n  },\n};\n\nlet _logLevel: LogLevel = \"info\";\n\nexport function setLogger(logger: Logger) {\n  _loggerHandlers = logger;\n  return _logger;\n}\n\nexport function setLogLevel(\n  logLevel: IsolateConfigResolved[\"logLevel\"]\n): Logger {\n  _logLevel = logLevel;\n  return _logger;\n}\n\nexport function useLogger() {\n  return _logger;\n}\n","import { fileURLToPath } from \"url\";\n\n/**\n * Calling context should pass in import.meta.url and the function will return\n * the equivalent of __dirname in Node/CommonJs.\n */\nexport function getDirname(importMetaUrl: string) {\n  return fileURLToPath(new URL(\".\", importMetaUrl));\n}\n","type ErrorWithMessage = {\n  message: string;\n};\n\nexport function getErrorMessage(error: unknown) {\n  return toErrorWithMessage(error).message;\n}\n\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n  return typeof error === \"object\" && error !== null && \"message\" in error;\n}\n\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n  if (isErrorWithMessage(maybeError)) return maybeError;\n\n  try {\n    return new Error(JSON.stringify(maybeError));\n  } catch {\n    /**\n     * Fallback in case there’s an error in stringify which can happen with\n     * circular references.\n     */\n    return new Error(String(maybeError));\n  }\n}\n","import { inspect } from \"node:util\";\n\nexport function inspectValue(value: unknown) {\n  return inspect(value, false, 16, true);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Detect if this is a Rush monorepo. They use a very different structure so\n * there are multiple places where we need to make exceptions based on this.\n */\nexport function isRushWorkspace(workspaceRootDir: string) {\n  return fs.existsSync(path.join(workspaceRootDir, \"rush.json\"));\n}\n","import fs from \"fs-extra\";\nimport stripJsonComments from \"strip-json-comments\";\nimport { getErrorMessage } from \"./get-error-message\";\n\n/** @todo Pass in zod schema and validate */\nexport function readTypedJsonSync<T>(filePath: string) {\n  try {\n    const rawContent = fs.readFileSync(filePath, \"utf-8\");\n    const data = JSON.parse(\n      stripJsonComments(rawContent, { trailingCommas: true })\n    ) as T;\n    return data;\n  } catch (err) {\n    throw new Error(\n      `Failed to read JSON from ${filePath}: ${getErrorMessage(err)}`\n    );\n  }\n}\n\nexport async function readTypedJson<T>(filePath: string) {\n  try {\n    const rawContent = await fs.readFile(filePath, \"utf-8\");\n    const data = JSON.parse(\n      stripJsonComments(rawContent, { trailingCommas: true })\n    ) as T;\n    return data;\n  } catch (err) {\n    throw new Error(\n      `Failed to read JSON from ${filePath}: ${getErrorMessage(err)}`\n    );\n  }\n}\n","import { join } from \"node:path\";\n\nexport function getRootRelativeLogPath(path: string, rootPath: string) {\n  const strippedPath = path.replace(rootPath, \"\");\n\n  return join(\"(root)\", strippedPath);\n}\n\nexport function getIsolateRelativeLogPath(path: string, isolatePath: string) {\n  const strippedPath = path.replace(isolatePath, \"\");\n\n  return join(\"(isolate)\", strippedPath);\n}\n","import assert from \"node:assert\";\nimport { exec } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { useLogger } from \"../logger\";\nimport { shouldUsePnpmPack } from \"../package-manager\";\nimport { getErrorMessage } from \"./get-error-message\";\n\nexport async function pack(srcDir: string, dstDir: string) {\n  const log = useLogger();\n\n  const execOptions = {\n    maxBuffer: 10 * 1024 * 1024,\n  };\n\n  const previousCwd = process.cwd();\n  process.chdir(srcDir);\n\n  /**\n   * PNPM pack seems to be a lot faster than NPM pack, so when PNPM is detected\n   * we use that instead.\n   */\n  const stdout = shouldUsePnpmPack()\n    ? await new Promise<string>((resolve, reject) => {\n        exec(\n          `pnpm pack --pack-destination \"${dstDir}\"`,\n          execOptions,\n          (err, stdout) => {\n            if (err) {\n              log.error(getErrorMessage(err));\n              return reject(err);\n            }\n\n            resolve(stdout);\n          }\n        );\n      })\n    : await new Promise<string>((resolve, reject) => {\n        exec(\n          `npm pack --pack-destination \"${dstDir}\"`,\n          execOptions,\n          (err, stdout) => {\n            if (err) {\n              return reject(err);\n            }\n\n            resolve(stdout);\n          }\n        );\n      });\n\n  const lastLine = stdout.trim().split(\"\\n\").at(-1);\n\n  assert(lastLine, `Failed to parse last line from stdout: ${stdout.trim()}`);\n\n  const fileName = path.basename(lastLine);\n\n  assert(fileName, `Failed to parse file name from: ${lastLine}`);\n\n  const filePath = path.join(dstDir, fileName);\n\n  if (!fs.existsSync(filePath)) {\n    log.error(\n      `The response from pack could not be resolved to an existing file: ${filePath}`\n    );\n  } else {\n    log.debug(`Packed (temp)/${fileName}`);\n  }\n\n  process.chdir(previousCwd);\n\n  /**\n   * Return the path anyway even if it doesn't validate. A later stage will wait\n   * for the file to occur still. Not sure if this makes sense. Maybe we should\n   * stop at the validation error...\n   */\n  return filePath;\n}\n","import path from \"node:path\";\nimport { isRushWorkspace } from \"../utils/is-rush-workspace\";\nimport { inferFromFiles, inferFromManifest } from \"./helpers\";\nimport type { PackageManager } from \"./names\";\n\nexport * from \"./names\";\n\nlet packageManager: PackageManager | undefined;\n\nexport function usePackageManager() {\n  if (!packageManager) {\n    throw Error(\n      \"No package manager detected. Make sure to call detectPackageManager() before usePackageManager()\"\n    );\n  }\n\n  return packageManager;\n}\n\n/**\n * First we check if the package manager is declared in the manifest. If it is,\n * we get the name and version from there. Otherwise we'll search for the\n * different lockfiles and ask the OS to report the installed version.\n */\nexport function detectPackageManager(workspaceRootDir: string): PackageManager {\n  if (isRushWorkspace(workspaceRootDir)) {\n    packageManager = inferFromFiles(\n      path.join(workspaceRootDir, \"common/config/rush\")\n    );\n  } else {\n    /**\n     * Disable infer from manifest for now. I doubt it is useful after all but\n     * I'll keep the code as a reminder.\n     */\n    packageManager =\n      inferFromManifest(workspaceRootDir) ?? inferFromFiles(workspaceRootDir);\n  }\n\n  return packageManager;\n}\n\nexport function shouldUsePnpmPack() {\n  const { name, majorVersion } = usePackageManager();\n\n  return name === \"pnpm\" && majorVersion >= 8;\n}\n","import fs from \"fs-extra\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport { getErrorMessage } from \"~/lib/utils\";\nimport { getMajorVersion } from \"~/lib/utils/get-major-version\";\nimport type { PackageManager, PackageManagerName } from \"../names\";\nimport { getLockfileFileName, supportedPackageManagerNames } from \"../names\";\n\nexport function inferFromFiles(workspaceRoot: string): PackageManager {\n  for (const name of supportedPackageManagerNames) {\n    const lockfileName = getLockfileFileName(name);\n\n    if (fs.existsSync(path.join(workspaceRoot, lockfileName))) {\n      try {\n        const version = getVersion(name);\n\n        return { name, version, majorVersion: getMajorVersion(version) };\n      } catch (err) {\n        throw new Error(\n          `Failed to find package manager version for ${name}: ${getErrorMessage(err)}`\n        );\n      }\n    }\n  }\n\n  /** If no lockfile was found, it could be that there is an npm shrinkwrap file. */\n  if (fs.existsSync(path.join(workspaceRoot, \"npm-shrinkwrap.json\"))) {\n    const version = getVersion(\"npm\");\n\n    return { name: \"npm\", version, majorVersion: getMajorVersion(version) };\n  }\n\n  throw new Error(`Failed to detect package manager`);\n}\n\nexport function getVersion(packageManagerName: PackageManagerName): string {\n  const buffer = execSync(`${packageManagerName} --version`);\n  return buffer.toString().trim();\n}\n","export function getMajorVersion(version: string) {\n  return parseInt(version.split(\".\")[0], 10);\n}\n","export const supportedPackageManagerNames = [\n  \"pnpm\",\n  \"yarn\",\n  \"npm\",\n  \"bun\",\n] as const;\n\nexport type PackageManagerName = (typeof supportedPackageManagerNames)[number];\n\nexport type PackageManager = {\n  name: PackageManagerName;\n  version: string;\n  majorVersion: number;\n  packageManagerString?: string;\n};\n\nexport function getLockfileFileName(name: PackageManagerName) {\n  switch (name) {\n    case \"bun\":\n      return \"bun.lock\";\n    case \"pnpm\":\n      return \"pnpm-lock.yaml\";\n    case \"yarn\":\n      return \"yarn.lock\";\n    case \"npm\":\n      return \"package-lock.json\";\n  }\n}\n","import fs from \"fs-extra\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport { useLogger } from \"~/lib/logger\";\nimport { getMajorVersion } from \"~/lib/utils/get-major-version\";\nimport type { PackageManifest } from \"../../types\";\nimport { readTypedJsonSync } from \"../../utils\";\nimport type { PackageManagerName } from \"../names\";\nimport { getLockfileFileName, supportedPackageManagerNames } from \"../names\";\n\nexport function inferFromManifest(workspaceRoot: string) {\n  const log = useLogger();\n\n  const { packageManager: packageManagerString } =\n    readTypedJsonSync<PackageManifest>(\n      path.join(workspaceRoot, \"package.json\")\n    );\n\n  if (!packageManagerString) {\n    log.debug(\"No packageManager field found in root manifest\");\n    return;\n  }\n\n  const [name, version = \"*\"] = packageManagerString.split(\"@\") as [\n    PackageManagerName,\n    string,\n  ];\n\n  assert(\n    supportedPackageManagerNames.includes(name),\n    `Package manager \"${name}\" is not currently supported`\n  );\n\n  const lockfileName = getLockfileFileName(name);\n\n  assert(\n    fs.existsSync(path.join(workspaceRoot, lockfileName)),\n    `Manifest declares ${name} to be the packageManager, but failed to find ${lockfileName} in workspace root`\n  );\n\n  return {\n    name,\n    version,\n    majorVersion: getMajorVersion(version),\n    packageManagerString,\n  };\n}\n","import fs from \"fs-extra\";\nimport tar from \"tar-fs\";\nimport { createGunzip } from \"zlib\";\n\nexport async function unpack(filePath: string, unpackDir: string) {\n  await new Promise<void>((resolve, reject) => {\n    fs.createReadStream(filePath)\n      .pipe(createGunzip())\n      .pipe(tar.extract(unpackDir))\n      .on(\"finish\", () => resolve())\n      .on(\"error\", (err) => reject(err));\n  });\n}\n","import fs from \"fs-extra\";\nimport yaml from \"yaml\";\nimport { getErrorMessage } from \"./get-error-message\";\n\nexport function readTypedYamlSync<T>(filePath: string) {\n  try {\n    const rawContent = fs.readFileSync(filePath, \"utf-8\");\n    const data = yaml.parse(rawContent);\n    /** @todo Add some zod validation maybe */\n    return data as T;\n  } catch (err) {\n    throw new Error(\n      `Failed to read YAML from ${filePath}: ${getErrorMessage(err)}`\n    );\n  }\n}\n\nexport function writeTypedYamlSync<T>(filePath: string, content: T) {\n  /** @todo Add some zod validation maybe */\n  fs.writeFileSync(filePath, yaml.stringify(content), \"utf-8\");\n}\n","import Arborist from \"@npmcli/arborist\";\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { useLogger } from \"~/lib/logger\";\nimport { getErrorMessage } from \"~/lib/utils\";\nimport { loadNpmConfig } from \"./load-npm-config\";\n\n/**\n * Generate an isolated / pruned lockfile, based on the contents of installed\n * node_modules from the monorepo root plus the adapted package manifest in the\n * isolate directory.\n */\nexport async function generateNpmLockfile({\n  workspaceRootDir,\n  isolateDir,\n}: {\n  workspaceRootDir: string;\n  isolateDir: string;\n}) {\n  const log = useLogger();\n\n  log.debug(\"Generating NPM lockfile...\");\n\n  const nodeModulesPath = path.join(workspaceRootDir, \"node_modules\");\n\n  try {\n    if (!fs.existsSync(nodeModulesPath)) {\n      throw new Error(`Failed to find node_modules at ${nodeModulesPath}`);\n    }\n\n    const config = await loadNpmConfig({ npmPath: workspaceRootDir });\n\n    const arborist = new Arborist({\n      path: isolateDir,\n      ...config.flat,\n    });\n\n    const { meta } = await arborist.buildIdealTree();\n\n    meta?.commit();\n\n    const lockfilePath = path.join(isolateDir, \"package-lock.json\");\n\n    await fs.writeFile(lockfilePath, String(meta));\n\n    log.debug(\"Created lockfile at\", lockfilePath);\n  } catch (err) {\n    log.error(`Failed to generate lockfile: ${getErrorMessage(err)}`);\n    throw err;\n  }\n}\n","import Config from \"@npmcli/config\";\nimport defaults from \"@npmcli/config/lib/definitions/index.js\";\n\nexport async function loadNpmConfig({ npmPath }: { npmPath: string }) {\n  const config = new Config({\n    npmPath,\n    definitions: defaults.definitions,\n    shorthands: defaults.shorthands,\n    flatten: defaults.flatten,\n  });\n\n  await config.load();\n\n  return config;\n}\n","import assert from \"node:assert\";\nimport path from \"node:path\";\nimport {\n  getLockfileImporterId as getLockfileImporterId_v8,\n  readWantedLockfile as readWantedLockfile_v8,\n  writeWantedLockfile as writeWantedLockfile_v8,\n} from \"pnpm_lockfile_file_v8\";\nimport {\n  getLockfileImporterId as getLockfileImporterId_v9,\n  readWantedLockfile as readWantedLockfile_v9,\n  writeWantedLockfile as writeWantedLockfile_v9,\n} from \"pnpm_lockfile_file_v9\";\nimport { pruneLockfile as pruneLockfile_v8 } from \"pnpm_prune_lockfile_v8\";\nimport { pruneLockfile as pruneLockfile_v9 } from \"pnpm_prune_lockfile_v9\";\nimport { pick } from \"remeda\";\nimport { useLogger } from \"~/lib/logger\";\nimport type { PackageManifest, PackagesRegistry } from \"~/lib/types\";\nimport { getErrorMessage, isRushWorkspace } from \"~/lib/utils\";\nimport { pnpmMapImporter } from \"./pnpm-map-importer\";\n\nexport async function generatePnpmLockfile({\n  workspaceRootDir,\n  targetPackageDir,\n  isolateDir,\n  internalDepPackageNames,\n  packagesRegistry,\n  targetPackageManifest,\n  majorVersion,\n  includeDevDependencies,\n  includePatchedDependencies,\n}: {\n  workspaceRootDir: string;\n  targetPackageDir: string;\n  isolateDir: string;\n  internalDepPackageNames: string[];\n  packagesRegistry: PackagesRegistry;\n  targetPackageManifest: PackageManifest;\n  majorVersion: number;\n  includeDevDependencies: boolean;\n  includePatchedDependencies: boolean;\n}) {\n  /**\n   * For now we will assume that the lockfile format might not change in the\n   * versions after 9, because we might get lucky. If it does change, things\n   * would break either way.\n   */\n  const useVersion9 = majorVersion >= 9;\n\n  const log = useLogger();\n\n  log.debug(\"Generating PNPM lockfile...\");\n\n  try {\n    const isRush = isRushWorkspace(workspaceRootDir);\n\n    const lockfile = useVersion9\n      ? await readWantedLockfile_v9(\n          isRush\n            ? path.join(workspaceRootDir, \"common/config/rush\")\n            : workspaceRootDir,\n          {\n            ignoreIncompatible: false,\n          }\n        )\n      : await readWantedLockfile_v8(\n          isRush\n            ? path.join(workspaceRootDir, \"common/config/rush\")\n            : workspaceRootDir,\n          {\n            ignoreIncompatible: false,\n          }\n        );\n\n    assert(lockfile, `No input lockfile found at ${workspaceRootDir}`);\n\n    const targetImporterId = useVersion9\n      ? getLockfileImporterId_v9(workspaceRootDir, targetPackageDir)\n      : getLockfileImporterId_v8(workspaceRootDir, targetPackageDir);\n\n    const directoryByPackageName = Object.fromEntries(\n      internalDepPackageNames.map((name) => {\n        const pkg = packagesRegistry[name];\n        assert(pkg, `Package ${name} not found in packages registry`);\n\n        return [name, pkg.rootRelativeDir];\n      })\n    );\n\n    const relevantImporterIds = [\n      targetImporterId,\n      /**\n       * The directory paths happen to correspond with what PNPM calls the\n       * importer ids in the context of a lockfile.\n       */\n      ...Object.values(directoryByPackageName),\n      /**\n       * Split the path by the OS separator and join it back with the POSIX\n       * separator.\n       *\n       * The importerIds are built from directory names, so Windows Git Bash\n       * environments will have double backslashes in their ids:\n       * \"packages\\common\" vs. \"packages/common\". Without this split & join, any\n       * packages not on the top-level will have ill-formatted importerIds and\n       * their entries will be missing from the lockfile.importers list.\n       */\n    ].map((x) => x.split(path.sep).join(path.posix.sep));\n\n    log.debug(\"Relevant importer ids:\", relevantImporterIds);\n\n    /**\n     * In a Rush workspace the original lockfile is not in the root, so the\n     * importerIds have to be prefixed with `../../`, but that's not how they\n     * should be stored in the isolated lockfile, so we use the prefixed ids\n     * only for parsing.\n     */\n    const relevantImporterIdsWithPrefix = relevantImporterIds.map((x) =>\n      isRush ? `../../${x}` : x\n    );\n\n    lockfile.importers = Object.fromEntries(\n      Object.entries(\n        pick(lockfile.importers, relevantImporterIdsWithPrefix)\n      ).map(([prefixedImporterId, importer]) => {\n        const importerId = isRush\n          ? prefixedImporterId.replace(\"../../\", \"\")\n          : prefixedImporterId;\n\n        if (importerId === targetImporterId) {\n          log.debug(\"Setting target package importer on root\");\n\n          return [\n            \".\",\n            pnpmMapImporter(\".\", importer!, {\n              includeDevDependencies,\n              includePatchedDependencies,\n              directoryByPackageName,\n            }),\n          ];\n        }\n\n        log.debug(\"Setting internal package importer:\", importerId);\n\n        return [\n          importerId,\n          pnpmMapImporter(importerId, importer!, {\n            includeDevDependencies: false, // Only include dev deps for target package\n            includePatchedDependencies,\n            directoryByPackageName,\n          }),\n        ];\n      })\n    );\n\n    log.debug(\"Pruning the lockfile\");\n\n    const prunedLockfile = useVersion9\n      ? await pruneLockfile_v9(lockfile, targetPackageManifest, \".\")\n      : await pruneLockfile_v8(lockfile, targetPackageManifest, \".\");\n\n    /** Pruning seems to remove the overrides from the lockfile */\n    if (lockfile.overrides) {\n      prunedLockfile.overrides = lockfile.overrides;\n    }\n\n    /**\n     * Don't know how to map the patched dependencies yet, so we just include\n     * them but I don't think it would work like this. The important thing for\n     * now is that they are omitted by default, because that is the most common\n     * use case.\n     */\n    const patchedDependencies = includePatchedDependencies\n      ? lockfile.patchedDependencies\n      : undefined;\n\n    useVersion9\n      ? await writeWantedLockfile_v9(isolateDir, {\n          ...prunedLockfile,\n          patchedDependencies,\n        })\n      : await writeWantedLockfile_v8(isolateDir, {\n          ...prunedLockfile,\n          patchedDependencies,\n        });\n\n    log.debug(\"Created lockfile at\", path.join(isolateDir, \"pnpm-lock.yaml\"));\n  } catch (err) {\n    log.error(`Failed to generate lockfile: ${getErrorMessage(err)}`);\n    throw err;\n  }\n}\n","import path from \"node:path\";\nimport type {\n  ProjectSnapshot,\n  ResolvedDependencies,\n} from \"pnpm_lockfile_file_v8\";\n\nimport { mapValues } from \"remeda\";\n\n/** Convert dependency links */\nexport function pnpmMapImporter(\n  importerPath: string,\n  { dependencies, devDependencies, ...rest }: ProjectSnapshot,\n  {\n    includeDevDependencies,\n    directoryByPackageName,\n  }: {\n    includeDevDependencies: boolean;\n    includePatchedDependencies: boolean;\n    directoryByPackageName: { [packageName: string]: string };\n  }\n): ProjectSnapshot {\n  return {\n    dependencies: dependencies\n      ? pnpmMapDependenciesLinks(\n          importerPath,\n          dependencies,\n          directoryByPackageName\n        )\n      : undefined,\n    devDependencies:\n      includeDevDependencies && devDependencies\n        ? pnpmMapDependenciesLinks(\n            importerPath,\n            devDependencies,\n            directoryByPackageName\n          )\n        : undefined,\n    ...rest,\n  };\n}\n\nfunction pnpmMapDependenciesLinks(\n  importerPath: string,\n  def: ResolvedDependencies,\n  directoryByPackageName: { [packageName: string]: string }\n): ResolvedDependencies {\n  return mapValues(def, (value, key) => {\n    if (!value.startsWith(\"link:\")) {\n      return value;\n    }\n\n    // Replace backslashes with forward slashes to support Windows Git Bash\n    const relativePath = path\n      .relative(importerPath, directoryByPackageName[key])\n      .replace(path.sep, path.posix.sep);\n\n    return relativePath.startsWith(\".\")\n      ? `link:${relativePath}`\n      : `link:./${relativePath}`;\n  });\n}\n","import fs from \"fs-extra\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport { useLogger } from \"~/lib/logger\";\nimport { getErrorMessage, isRushWorkspace } from \"~/lib/utils\";\n\n/**\n * Generate an isolated / pruned lockfile, based on the existing lockfile from\n * the monorepo root plus the adapted package manifest in the isolate\n * directory.\n */\nexport async function generateYarnLockfile({\n  workspaceRootDir,\n  isolateDir,\n}: {\n  workspaceRootDir: string;\n  isolateDir: string;\n}) {\n  const log = useLogger();\n\n  log.debug(\"Generating Yarn lockfile...\");\n\n  const origLockfilePath = isRushWorkspace(workspaceRootDir)\n    ? path.join(workspaceRootDir, \"common/config/rush\", \"yarn.lock\")\n    : path.join(workspaceRootDir, \"yarn.lock\");\n\n  const newLockfilePath = path.join(isolateDir, \"yarn.lock\");\n\n  if (!fs.existsSync(origLockfilePath)) {\n    throw new Error(`Failed to find lockfile at ${origLockfilePath}`);\n  }\n\n  log.debug(`Copy original yarn.lock to the isolate output`);\n\n  try {\n    await fs.copyFile(origLockfilePath, newLockfilePath);\n\n    /**\n     * Running install with the original lockfile in the same directory will\n     * generate a pruned version of the lockfile.\n     */\n    log.debug(`Running local install`);\n    execSync(`yarn install --cwd ${isolateDir}`);\n\n    log.debug(\"Generated lockfile at\", newLockfilePath);\n  } catch (err) {\n    log.error(`Failed to generate lockfile: ${getErrorMessage(err)}`);\n    throw err;\n  }\n}\n","import type { IsolateConfigResolved } from \"../config\";\nimport { useLogger } from \"../logger\";\nimport { usePackageManager } from \"../package-manager\";\nimport type { PackageManifest, PackagesRegistry } from \"../types\";\nimport {\n  generateNpmLockfile,\n  generatePnpmLockfile,\n  generateYarnLockfile,\n} from \"./helpers\";\n\n/**\n * Adapt the lockfile and write it to the isolate directory. Because we keep the\n * structure of packages in the isolate directory the same as they were in the\n * monorepo, the lockfile is largely still correct. The only things that need to\n * be done is to remove the root dependencies and devDependencies, and rename\n * the path to the target package to act as the new root.\n */\nexport async function processLockfile({\n  workspaceRootDir,\n  packagesRegistry,\n  isolateDir,\n  internalDepPackageNames,\n  targetPackageDir,\n  targetPackageManifest,\n  config,\n}: {\n  workspaceRootDir: string;\n  packagesRegistry: PackagesRegistry;\n  isolateDir: string;\n  internalDepPackageNames: string[];\n  targetPackageDir: string;\n  targetPackageName: string;\n  targetPackageManifest: PackageManifest;\n  config: IsolateConfigResolved;\n}) {\n  const log = useLogger();\n\n  if (config.forceNpm) {\n    log.debug(\"Forcing to use NPM for isolate output\");\n\n    await generateNpmLockfile({\n      workspaceRootDir,\n      isolateDir,\n    });\n\n    return true;\n  }\n\n  const { name, majorVersion } = usePackageManager();\n  let usedFallbackToNpm = false;\n\n  switch (name) {\n    case \"npm\": {\n      await generateNpmLockfile({\n        workspaceRootDir,\n        isolateDir,\n      });\n\n      break;\n    }\n    case \"yarn\": {\n      if (majorVersion === 1) {\n        await generateYarnLockfile({\n          workspaceRootDir,\n          isolateDir,\n        });\n      } else {\n        log.warn(\n          \"Detected modern version of Yarn. Using NPM lockfile fallback.\"\n        );\n\n        await generateNpmLockfile({\n          workspaceRootDir,\n          isolateDir,\n        });\n\n        usedFallbackToNpm = true;\n      }\n\n      break;\n    }\n    case \"pnpm\": {\n      await generatePnpmLockfile({\n        workspaceRootDir,\n        targetPackageDir,\n        isolateDir,\n        internalDepPackageNames,\n        packagesRegistry,\n        targetPackageManifest,\n        majorVersion,\n        includeDevDependencies: config.includeDevDependencies,\n        includePatchedDependencies: config.includePatchedDependencies,\n      });\n      break;\n    }\n    case \"bun\": {\n      log.warn(\n        `Ouput lockfiles for Bun are not yet supported. Using NPM for output`\n      );\n      await generateNpmLockfile({\n        workspaceRootDir,\n        isolateDir,\n      });\n\n      usedFallbackToNpm = true;\n      break;\n    }\n    default:\n      log.warn(`Unexpected package manager ${name}. Using NPM for output`);\n      await generateNpmLockfile({\n        workspaceRootDir,\n        isolateDir,\n      });\n\n      usedFallbackToNpm = true;\n  }\n\n  return usedFallbackToNpm;\n}\n","import type { PackageScripts } from \"@pnpm/types\";\nimport { omit, pick } from \"remeda\";\nimport type { IsolateConfigResolved } from \"../config\";\nimport { usePackageManager } from \"../package-manager\";\nimport type { PackageManifest, PackagesRegistry } from \"../types\";\nimport { adaptManifestInternalDeps, adoptPnpmFieldsFromRoot } from \"./helpers\";\n\n/**\n * Adapt the output package manifest, so that:\n *\n * - Its internal dependencies point to the isolated ./packages/* directory.\n * - The devDependencies are possibly removed\n * - Scripts are picked or omitted and otherwise removed\n */\nexport async function adaptTargetPackageManifest({\n  manifest,\n  packagesRegistry,\n  workspaceRootDir,\n  config,\n}: {\n  manifest: PackageManifest;\n  packagesRegistry: PackagesRegistry;\n  workspaceRootDir: string;\n  config: IsolateConfigResolved;\n}): Promise<PackageManifest> {\n  const packageManager = usePackageManager();\n  const {\n    includeDevDependencies,\n    pickFromScripts,\n    omitFromScripts,\n    omitPackageManager,\n    forceNpm,\n  } = config;\n\n  /** Dev dependencies are omitted by default */\n  const inputManifest = includeDevDependencies\n    ? manifest\n    : omit(manifest, [\"devDependencies\"]);\n\n  const adaptedManifest =\n    packageManager.name === \"pnpm\" && !forceNpm\n      ? /**\n         * For PNPM the output itself is a workspace so we can preserve the specifiers\n         * with \"workspace:*\" in the output manifest, but we do want to adopt the\n         * pnpm.overrides field from the root package.json.\n         */\n        await adoptPnpmFieldsFromRoot(inputManifest, workspaceRootDir)\n      : /** For other package managers we replace the links to internal dependencies */\n        adaptManifestInternalDeps({\n          manifest: inputManifest,\n          packagesRegistry,\n        });\n\n  return {\n    ...adaptedManifest,\n    /**\n     * Adopt the package manager definition from the root manifest if available.\n     * The option to omit is there because some platforms might not handle it\n     * properly (Cloud Run, April 24th 2024, does not handle pnpm v9)\n     */\n    packageManager: omitPackageManager\n      ? undefined\n      : packageManager.packageManagerString,\n    /**\n     * Scripts are removed by default if not explicitly picked or omitted via\n     * config.\n     */\n    scripts: pickFromScripts\n      ? (pick(manifest.scripts ?? {}, pickFromScripts) as PackageScripts)\n      : omitFromScripts\n        ? (omit(manifest.scripts ?? {}, omitFromScripts) as PackageScripts)\n        : {},\n  };\n}\n","import path from \"node:path\";\nimport { omit } from \"remeda\";\nimport { usePackageManager } from \"~/lib/package-manager\";\nimport type { PackagesRegistry } from \"~/lib/types\";\nimport { writeManifest } from \"../io\";\nimport { adaptManifestInternalDeps } from \"./adapt-manifest-internal-deps\";\n\n/**\n * Adapt the manifest files of all the isolated internal packages (excluding the\n * target package), so that their dependencies point to the other isolated\n * packages in the same folder.\n */\nexport async function adaptInternalPackageManifests({\n  internalPackageNames,\n  packagesRegistry,\n  isolateDir,\n  forceNpm,\n}: {\n  internalPackageNames: string[];\n  packagesRegistry: PackagesRegistry;\n  isolateDir: string;\n  forceNpm: boolean;\n}) {\n  const packageManager = usePackageManager();\n\n  await Promise.all(\n    internalPackageNames.map(async (packageName) => {\n      const { manifest, rootRelativeDir } = packagesRegistry[packageName];\n\n      /** Dev dependencies and scripts are never included for internal deps */\n      const strippedManifest = omit(manifest, [\"scripts\", \"devDependencies\"]);\n\n      const outputManifest =\n        packageManager.name === \"pnpm\" && !forceNpm\n          ? /**\n             * For PNPM the output itself is a workspace so we can preserve the specifiers\n             * with \"workspace:*\" in the output manifest.\n             */\n            strippedManifest\n          : /** For other package managers we replace the links to internal dependencies */\n            adaptManifestInternalDeps({\n              manifest: strippedManifest,\n              packagesRegistry,\n              parentRootRelativeDir: rootRelativeDir,\n            });\n\n      await writeManifest(\n        path.join(isolateDir, rootRelativeDir),\n        outputManifest\n      );\n    })\n  );\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport type { PackageManifest } from \"../types\";\nimport { readTypedJson } from \"../utils\";\n\nexport async function readManifest(packageDir: string) {\n  return readTypedJson<PackageManifest>(path.join(packageDir, \"package.json\"));\n}\n\nexport async function writeManifest(\n  outputDir: string,\n  manifest: PackageManifest\n) {\n  await fs.writeFile(\n    path.join(outputDir, \"package.json\"),\n    JSON.stringify(manifest, null, 2)\n  );\n}\n","import path from \"node:path\";\nimport { useLogger } from \"../../logger\";\nimport type { PackagesRegistry } from \"../../types\";\n\nexport function patchInternalEntries(\n  dependencies: Record<string, string>,\n  packagesRegistry: PackagesRegistry,\n  parentRootRelativeDir?: string\n) {\n  const log = useLogger();\n  const allWorkspacePackageNames = Object.keys(packagesRegistry);\n\n  return Object.fromEntries(\n    Object.entries(dependencies).map(([key, value]) => {\n      if (allWorkspacePackageNames.includes(key)) {\n        const def = packagesRegistry[key];\n\n        /**\n         * When nested internal dependencies are used (internal packages linking\n         * to other internal packages), the parentRootRelativeDir will be passed\n         * in, and we store the relative path to the isolate/packages\n         * directory.\n         *\n         * For consistency we also write the other file paths starting with ./,\n         * but it doesn't seem to be necessary for any package manager.\n         */\n        const relativePath = parentRootRelativeDir\n          ? path.relative(parentRootRelativeDir, `./${def.rootRelativeDir}`)\n          : `./${def.rootRelativeDir}`;\n\n        const linkPath = `file:${relativePath}`;\n\n        log.debug(`Linking dependency ${key} to ${linkPath}`);\n\n        return [key, linkPath];\n      } else {\n        return [key, value];\n      }\n    })\n  );\n}\n","import type { PackageManifest, PackagesRegistry } from \"~/lib/types\";\nimport { patchInternalEntries } from \"./patch-internal-entries\";\n\n/**\n * Replace the workspace version specifiers for internal dependency with file:\n * paths. Not needed for PNPM (because we configure the isolated output as a\n * workspace), but maybe still for NPM and Yarn.\n */\nexport function adaptManifestInternalDeps({\n  manifest,\n  packagesRegistry,\n  parentRootRelativeDir,\n}: {\n  manifest: PackageManifest;\n  packagesRegistry: PackagesRegistry;\n  parentRootRelativeDir?: string;\n}): PackageManifest {\n  const { dependencies, devDependencies } = manifest;\n\n  return {\n    ...manifest,\n    dependencies: dependencies\n      ? patchInternalEntries(\n          dependencies,\n          packagesRegistry,\n          parentRootRelativeDir\n        )\n      : undefined,\n    devDependencies: devDependencies\n      ? patchInternalEntries(\n          devDependencies,\n          packagesRegistry,\n          parentRootRelativeDir\n        )\n      : undefined,\n  };\n}\n","import type { ProjectManifest, PnpmSettings } from \"@pnpm/types\";\nimport path from \"path\";\nimport type { PackageManifest } from \"~/lib/types\";\nimport { isRushWorkspace, readTypedJson } from \"~/lib/utils\";\n\n/**\n * Adopts the `pnpm` fields from the root package manifest. Currently it takes\n * overrides, onlyBuiltDependencies, and ignoredBuiltDependencies, because these\n * are typically workspace-level configuration settings.\n */\nexport async function adoptPnpmFieldsFromRoot(\n  targetPackageManifest: PackageManifest,\n  workspaceRootDir: string\n): Promise<PackageManifest> {\n  if (isRushWorkspace(workspaceRootDir)) {\n    return targetPackageManifest;\n  }\n\n  const rootPackageManifest = await readTypedJson<ProjectManifest>(\n    path.join(workspaceRootDir, \"package.json\")\n  );\n\n  const { overrides, onlyBuiltDependencies, ignoredBuiltDependencies } =\n    rootPackageManifest.pnpm || {};\n\n  /** If no pnpm fields are present, return the original manifest */\n  if (!overrides && !onlyBuiltDependencies && !ignoredBuiltDependencies) {\n    return targetPackageManifest;\n  }\n\n  const pnpmConfig: Partial<PnpmSettings> = {};\n\n  if (overrides) {\n    pnpmConfig.overrides = overrides;\n  }\n\n  if (onlyBuiltDependencies) {\n    pnpmConfig.onlyBuiltDependencies = onlyBuiltDependencies;\n  }\n\n  if (ignoredBuiltDependencies) {\n    pnpmConfig.ignoredBuiltDependencies = ignoredBuiltDependencies;\n  }\n\n  return {\n    ...targetPackageManifest,\n    pnpm: pnpmConfig,\n  } as PackageManifest;\n}\n","import { useLogger } from \"../logger\";\nimport type { PackageManifest } from \"../types\";\n\n/**\n * Validate that mandatory fields are present in the package manifest. These\n * fields are required for the isolate process to work properly.\n *\n * @param manifest - The package manifest to validate\n * @param packagePath - The path to the package (for error reporting)\n * @param requireFilesField - Whether to require the files field (true for\n *   production deps, false for dev-only deps)\n * @throws Error if mandatory fields are missing\n */\nexport function validateManifestMandatoryFields(\n  manifest: PackageManifest,\n  packagePath: string,\n  requireFilesField = true\n): void {\n  const log = useLogger();\n  const missingFields: string[] = [];\n\n  /** The version field is required for all packages */\n  if (!manifest.version) {\n    missingFields.push(\"version\");\n  }\n\n  /**\n   * The files field is only required for production dependencies that will be\n   * packed\n   */\n  if (\n    requireFilesField &&\n    (!manifest.files ||\n      !Array.isArray(manifest.files) ||\n      manifest.files.length === 0)\n  ) {\n    missingFields.push(\"files\");\n  }\n\n  if (missingFields.length > 0) {\n    const errorMessage = `Package at ${packagePath} is missing mandatory fields: ${missingFields.join(\", \")}. See the documentation for more details.`;\n\n    log.error(errorMessage);\n    throw new Error(errorMessage);\n  }\n\n  log.debug(`Validated mandatory fields for package at ${packagePath}`);\n}\n","import { getTsconfig } from \"get-tsconfig\";\nimport path from \"node:path\";\nimport outdent from \"outdent\";\nimport { useLogger } from \"../logger\";\n\nexport async function getBuildOutputDir({\n  targetPackageDir,\n  buildDirName,\n  tsconfigPath,\n}: {\n  targetPackageDir: string;\n  buildDirName?: string;\n  tsconfigPath: string;\n}) {\n  const log = useLogger();\n\n  if (buildDirName) {\n    log.debug(\"Using buildDirName from config:\", buildDirName);\n    return path.join(targetPackageDir, buildDirName);\n  }\n\n  const fullTsconfigPath = path.join(targetPackageDir, tsconfigPath);\n\n  const tsconfig = getTsconfig(fullTsconfigPath);\n\n  if (tsconfig) {\n    log.debug(\"Found tsconfig at:\", tsconfig.path);\n\n    const outDir = tsconfig.config.compilerOptions?.outDir;\n\n    if (outDir) {\n      return path.join(targetPackageDir, outDir);\n    } else {\n      throw new Error(outdent`\n        Failed to find outDir in tsconfig. If you are executing isolate from the root of a monorepo you should specify the buildDirName in isolate.config.json.\n      `);\n    }\n  } else {\n    log.warn(\"Failed to find tsconfig at:\", fullTsconfigPath);\n\n    throw new Error(outdent`\n      Failed to infer the build output directory from either the isolate config buildDirName or a Typescript config file. See the documentation on how to configure one of these options.\n    `);\n  }\n}\n","import assert from \"node:assert\";\nimport { useLogger } from \"../logger\";\nimport type { PackagesRegistry } from \"../types\";\nimport { pack } from \"../utils\";\n\n/**\n * Pack dependencies so that we extract only the files that are supposed to be\n * published by the packages.\n *\n * @returns A map of package names to the path of the packed file\n */\nexport async function packDependencies({\n  /** All packages found in the monorepo by workspaces declaration */\n  packagesRegistry,\n  /** The dependencies that appear to be internal packages */\n  internalPackageNames,\n  /**\n   * The directory where the isolated package and all its dependencies will end\n   * up. This is also the directory from where the package will be deployed. By\n   * default it is a subfolder in targetPackageDir called \"isolate\" but you can\n   * configure it.\n   */\n  packDestinationDir,\n}: {\n  packagesRegistry: PackagesRegistry;\n  internalPackageNames: string[];\n  packDestinationDir: string;\n}) {\n  const log = useLogger();\n\n  const packedFileByName: Record<string, string> = {};\n\n  for (const dependency of internalPackageNames) {\n    const def = packagesRegistry[dependency];\n\n    assert(dependency, `Failed to find package definition for ${dependency}`);\n\n    const { name } = def.manifest;\n\n    /**\n     * If this dependency has already been packed, we skip it. It could happen\n     * because we are packing workspace dependencies recursively.\n     */\n    if (packedFileByName[name]) {\n      log.debug(`Skipping ${name} because it has already been packed`);\n      continue;\n    }\n\n    packedFileByName[name] = await pack(def.absoluteDir, packDestinationDir);\n  }\n\n  return packedFileByName;\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { useLogger } from \"../logger\";\nimport { pack, unpack } from \"../utils\";\n\nconst TIMEOUT_MS = 5000;\n\nexport async function processBuildOutputFiles({\n  targetPackageDir,\n  tmpDir,\n  isolateDir,\n}: {\n  targetPackageDir: string;\n  tmpDir: string;\n  isolateDir: string;\n}) {\n  const log = useLogger();\n\n  const packedFilePath = await pack(targetPackageDir, tmpDir);\n  const unpackDir = path.join(tmpDir, \"target\");\n\n  const now = Date.now();\n  let isWaitingYet = false;\n\n  while (!fs.existsSync(packedFilePath) && Date.now() - now < TIMEOUT_MS) {\n    if (!isWaitingYet) {\n      log.debug(`Waiting for ${packedFilePath} to become available...`);\n    }\n    isWaitingYet = true;\n    await new Promise((resolve) => setTimeout(resolve, 100));\n  }\n\n  await unpack(packedFilePath, unpackDir);\n  await fs.copy(path.join(unpackDir, \"package\"), isolateDir);\n}\n","import fs from \"fs-extra\";\nimport path, { join } from \"node:path\";\nimport { useLogger } from \"../logger\";\nimport type { PackagesRegistry } from \"../types\";\nimport { getIsolateRelativeLogPath, unpack } from \"../utils\";\n\nexport async function unpackDependencies(\n  packedFilesByName: Record<string, string>,\n  packagesRegistry: PackagesRegistry,\n  tmpDir: string,\n  isolateDir: string\n) {\n  const log = useLogger();\n\n  await Promise.all(\n    Object.entries(packedFilesByName).map(async ([packageName, filePath]) => {\n      const dir = packagesRegistry[packageName].rootRelativeDir;\n      const unpackDir = join(tmpDir, dir);\n\n      log.debug(\"Unpacking\", `(temp)/${path.basename(filePath)}`);\n\n      await unpack(filePath, unpackDir);\n\n      const destinationDir = join(isolateDir, dir);\n\n      await fs.ensureDir(destinationDir);\n\n      await fs.move(join(unpackDir, \"package\"), destinationDir, {\n        overwrite: true,\n      });\n\n      log.debug(\n        `Moved package files to ${getIsolateRelativeLogPath(\n          destinationDir,\n          isolateDir\n        )}`\n      );\n    })\n  );\n}\n","import fs from \"fs-extra\";\nimport { globSync } from \"glob\";\nimport path from \"node:path\";\nimport { useLogger } from \"../logger\";\nimport type { PackageManifest, PackagesRegistry } from \"../types\";\nimport { isRushWorkspace, readTypedJson, readTypedJsonSync } from \"../utils\";\nimport { findPackagesGlobs } from \"./helpers\";\n\n/**\n * Build a list of all packages in the workspace, depending on the package\n * manager used, with a possible override from the config file. The list\n * contains the manifest with some directory info mapped by module name.\n */\nexport async function createPackagesRegistry(\n  workspaceRootDir: string,\n  workspacePackagesOverride: string[] | undefined\n): Promise<PackagesRegistry> {\n  const log = useLogger();\n\n  if (workspacePackagesOverride) {\n    log.debug(\n      `Override workspace packages via config: ${workspacePackagesOverride}`\n    );\n  }\n\n  const allPackages = listWorkspacePackages(\n    workspacePackagesOverride,\n    workspaceRootDir\n  );\n\n  const registry: PackagesRegistry = (\n    await Promise.all(\n      allPackages.map(async (rootRelativeDir) => {\n        const absoluteDir = path.join(workspaceRootDir, rootRelativeDir);\n        const manifestPath = path.join(absoluteDir, \"package.json\");\n\n        if (!fs.existsSync(manifestPath)) {\n          log.warn(\n            `Ignoring directory ${rootRelativeDir} because it does not contain a package.json file`\n          );\n          return;\n        } else {\n          log.debug(`Registering package ${rootRelativeDir}`);\n\n          const manifest = await readTypedJson<PackageManifest>(\n            path.join(absoluteDir, \"package.json\")\n          );\n\n          return {\n            manifest,\n            rootRelativeDir,\n            absoluteDir,\n          };\n        }\n      })\n    )\n  ).reduce<PackagesRegistry>((acc, info) => {\n    if (info) {\n      acc[info.manifest.name] = info;\n    }\n    return acc;\n  }, {});\n\n  return registry;\n}\n\ntype RushConfig = {\n  projects: { packageName: string; projectFolder: string }[];\n};\n\nfunction listWorkspacePackages(\n  workspacePackagesOverride: string[] | undefined,\n  workspaceRootDir: string\n) {\n  if (isRushWorkspace(workspaceRootDir)) {\n    const rushConfig = readTypedJsonSync<RushConfig>(\n      path.join(workspaceRootDir, \"rush.json\")\n    );\n\n    return rushConfig.projects.map(({ projectFolder }) => projectFolder);\n  } else {\n    const currentDir = process.cwd();\n    process.chdir(workspaceRootDir);\n\n    const packagesGlobs =\n      workspacePackagesOverride ?? findPackagesGlobs(workspaceRootDir);\n\n    const allPackages = packagesGlobs\n      .flatMap((glob) => globSync(glob))\n      /** Make sure to filter any loose files that might hang around. */\n      .filter((dir) => fs.lstatSync(dir).isDirectory());\n\n    process.chdir(currentDir);\n    return allPackages;\n  }\n}\n","import assert from \"node:assert\";\nimport path from \"node:path\";\nimport { useLogger } from \"../../logger\";\nimport { usePackageManager } from \"../../package-manager\";\nimport {\n  inspectValue,\n  readTypedJsonSync,\n  readTypedYamlSync,\n} from \"../../utils\";\n\n/**\n * Find the globs that define where the packages are located within the\n * monorepo. This configuration is dependent on the package manager used, and I\n * don't know if we're covering all cases yet...\n */\nexport function findPackagesGlobs(workspaceRootDir: string) {\n  const log = useLogger();\n\n  const packageManager = usePackageManager();\n\n  switch (packageManager.name) {\n    case \"pnpm\": {\n      const workspaceConfig = readTypedYamlSync<{ packages: string[] }>(\n        path.join(workspaceRootDir, \"pnpm-workspace.yaml\")\n      );\n\n      if (!workspaceConfig) {\n        throw new Error(\n          \"pnpm-workspace.yaml file is empty. Please specify packages configuration.\"\n        );\n      }\n\n      assert(\n        workspaceConfig.packages,\n        \"packages property must be defined in pnpm-workspace.yaml\"\n      );\n\n      const { packages: globs } = workspaceConfig;\n\n      log.debug(\"Detected pnpm packages globs:\", inspectValue(globs));\n      return globs;\n    }\n    case \"bun\":\n    case \"yarn\":\n    case \"npm\": {\n      const workspaceRootManifestPath = path.join(\n        workspaceRootDir,\n        \"package.json\"\n      );\n\n      const { workspaces } = readTypedJsonSync<{ workspaces: string[] }>(\n        workspaceRootManifestPath\n      );\n\n      if (!workspaces) {\n        throw new Error(\n          `No workspaces field found in ${workspaceRootManifestPath}`\n        );\n      }\n\n      if (Array.isArray(workspaces)) {\n        return workspaces;\n      } else {\n        /**\n         * For Yarn, workspaces could be defined as an object with { packages:\n         * [], nohoist: [] }. See\n         * https://classic.yarnpkg.com/blog/2018/02/15/nohoist/\n         */\n        const workspacesObject = workspaces as { packages?: string[] };\n\n        assert(\n          workspacesObject.packages,\n          \"workspaces.packages must be an array\"\n        );\n\n        return workspacesObject.packages;\n      }\n    }\n  }\n}\n","import { unique } from \"remeda\";\nimport type { PackageManifest, PackagesRegistry } from \"../types\";\n\n/**\n * Recursively list all the packages from dependencies (and optionally\n * devDependencies) that are found in the monorepo.\n *\n * Here we do not need to rely on packages being declared with \"workspace:\" in\n * the package manifest. We can simply compare the package names with the list\n * of packages that were found via the workspace glob patterns and add them to\n * the registry.\n */\nexport function listInternalPackages(\n  manifest: PackageManifest,\n  packagesRegistry: PackagesRegistry,\n  { includeDevDependencies = false } = {}\n): string[] {\n  const allWorkspacePackageNames = Object.keys(packagesRegistry);\n\n  const internalPackageNames = (\n    includeDevDependencies\n      ? [\n          ...Object.keys(manifest.dependencies ?? {}),\n          ...Object.keys(manifest.devDependencies ?? {}),\n        ]\n      : Object.keys(manifest.dependencies ?? {})\n  ).filter((name) => allWorkspacePackageNames.includes(name));\n\n  const nestedInternalPackageNames = internalPackageNames.flatMap(\n    (packageName) =>\n      listInternalPackages(\n        packagesRegistry[packageName].manifest,\n        packagesRegistry,\n        { includeDevDependencies }\n      )\n  );\n\n  return unique(internalPackageNames.concat(nestedInternalPackageNames));\n}\n"],"mappings":"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","names":["fs","assert","path","unique","fs","path","fs","fs","path","assert","fs","path","path","fs","path","fs","path","fs","path","path","fs","path","stdout","assert","path","fs","fs","fs","fs","path","fs","fs","path","path","fs","assert","path","path","path","assert","fs","execSync","path","path","fs","execSync","omit","pick","path","fs","path","path","fs","path","path","packageManager","path","path","path","packageManager","omit","pick","path","path","assert","assert","fs","path","path","fs","fs","path","join","join","path","fs","fs","path","assert","path","packageManager","path","assert","path","fs","isolate","config","path","assert","fs","packageManager","unique"]}