{"version":3,"sources":["../src/index.ts","../node_modules/.pnpm/tsup@5.12.9_typescript@5.4.3/node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["import fixturify from 'fixturify';\nimport tmp from 'tmp';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport resolvePackagePath from 'resolve-package-path';\nimport CacheGroup from 'resolve-package-path/lib/cache-group.js';\nimport binLinks from 'bin-links';\nimport { PackageJson as BasePackageJson } from 'type-fest';\nimport walkSync from 'walk-sync';\nimport deepmerge from 'deepmerge';\nimport { findWorkspaceDir } from '@pnpm/find-workspace-dir';\nimport { findWorkspacePackages } from '@pnpm/workspace.find-packages';\nimport { packlist } from '@pnpm/fs.packlist';\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\nconst { PackageCache } = require('@embroider/shared-internals');\n\n// we also allow adding arbitrary key/value pairs to a PackageJson\ntype PackageJson = BasePackageJson & Record<string, any>;\ntype ProjectCallback = (project: Project) => void;\n\ninterface ReadDirOpts {\n  linkDeps?: boolean;\n  linkDevDeps?: boolean;\n}\n\nexport interface ProjectArgs {\n  name?: string;\n  version?: string;\n  files?: fixturify.DirJSON;\n  requestedRange?: string;\n}\n\ntmp.setGracefulCleanup();\n\nconst defaultFiles = {\n  'index.js': `\n    'use strict';\n     module.exports = {};`,\n};\n\nexport class Project {\n  pkg: PackageJson;\n  files: fixturify.DirJSON;\n  readonly isDependency = true;\n\n  private _dependencies: { [name: string]: Project } = {};\n  private _devDependencies: { [name: string]: Project } = {};\n  private _baseDir: string | undefined;\n  private _tmp: tmp.SynchrounousResult | undefined;\n  // when used as a dependency in another Project, this is the semver range it\n  // will appear as within the parent's package.json\n  private requestedRange: string;\n  private dependencyLinks: Map<string, LinkParams> = new Map();\n  private linkIsDevDependency: Set<string> = new Set();\n  private usingHardLinks = true;\n  // we keep our own package resolution cache because the default global one\n  // could get polluted by us resolving test-specific things that will change on\n  // subsequent tests.\n  private resolutionCache = new CacheGroup();\n\n  constructor(\n    name?: string,\n    version?: string,\n    args?: Omit<ProjectArgs, 'name' | 'version'>,\n    projectCallback?: ProjectCallback\n  );\n  constructor(name?: string, version?: string, args?: Omit<ProjectArgs, 'name' | 'version'>);\n  constructor(name?: string, version?: string, projectCallback?: ProjectCallback);\n  constructor(name?: string, args?: Omit<ProjectArgs, 'name'>, projectCallback?: ProjectCallback);\n  constructor(args?: ProjectArgs, projectCallback?: ProjectCallback);\n  /**\n   * @constructor Project\n   *\n   */\n  constructor(\n    first?: string | ProjectArgs,\n    second?: string | Omit<ProjectArgs, 'name'> | ProjectCallback,\n    third?: Omit<ProjectArgs, 'name' | 'version'> | ProjectCallback,\n    fourth?: ProjectCallback\n  ) {\n    let name: string | undefined;\n    let version: string | undefined;\n    let files: fixturify.DirJSON | undefined;\n    let requestedRange: string | undefined;\n    if (first == null) {\n      // all optional args stay undefined\n    } else if (typeof first === 'string') {\n      name = first;\n      if (typeof second === 'string') {\n        version = second;\n        if (third) {\n          if (!isProjectCallback(third)) {\n            ({ files, requestedRange } = third);\n          }\n        }\n      } else {\n        if (second) {\n          if (!isProjectCallback(second)) {\n            ({ version, files, requestedRange } = second);\n          }\n        }\n      }\n    } else {\n      ({ name, version, files, requestedRange } = first);\n    }\n\n    let pkg: PackageJson = {};\n\n    if (files && typeof files?.['package.json'] === 'string') {\n      pkg = JSON.parse(files['package.json']);\n      files = deepmerge({}, files);\n      delete files['package.json'];\n    }\n\n    this.pkg = Object.assign({}, pkg, {\n      name: name || pkg.name || 'a-fixturified-project',\n      version: version || pkg.version || '0.0.0',\n      keywords: pkg.keywords || [],\n    });\n    if (files) {\n      this.files = deepmerge({}, { ...defaultFiles, ...files });\n    } else {\n      this.files = deepmerge({}, defaultFiles);\n    }\n    this.requestedRange = requestedRange || this.pkg.version!;\n\n    const arity = arguments.length;\n    if (arity > 1) {\n      fourth;\n      const projectCallback = arguments[arity - 1];\n      if (isProjectCallback(projectCallback)) {\n        projectCallback(this);\n      }\n    }\n  }\n\n  /**\n   * Sets the base directory of the project.\n   *\n   * @memberof Project\n   * @param dir - The directory path.\n   */\n  set baseDir(dir: string) {\n    if (this._baseDir) {\n      throw new Error(`this Project already has a baseDir`);\n    }\n    this._baseDir = dir;\n  }\n\n  /**\n   * Gets the base directory path, usually a tmp directory unless a baseDir has been explicitly set.\n   *\n   * @readonly\n   * @memberof Project\n   */\n  get baseDir() {\n    if (!this._baseDir) {\n      this._tmp = tmp.dirSync({ unsafeCleanup: true });\n      this._baseDir = fs.realpathSync(this._tmp.name);\n    }\n    return this._baseDir;\n  }\n\n  /**\n   * Gets the package name from the package.json.\n   *\n   * @type {string}\n   * @memberof Project\n   */\n  get name(): string {\n    return getPackageName(this.pkg);\n  }\n\n  /**\n   * Sets the package name in the package.json.\n   *\n   * @memberof Project\n   */\n  set name(value: string) {\n    this.pkg.name = value;\n  }\n\n  /**\n   * Gets the version number from the package.json.\n   *\n   * @type {string}\n   * @memberof Project\n   */\n  get version(): string {\n    return getPackageVersion(this.pkg);\n  }\n\n  /**\n   * Sets the version number in the package.json.\n   *\n   * @memberof Project\n   */\n  set version(value: string) {\n    this.pkg.version = value;\n  }\n\n  /**\n   * Reads an existing project from the specified base dir.\n   *\n   * @param baseDir - The base directory to read the project from.\n   * @param opts - An options object.\n   * @param opts.linkDeps - Include linking dependencies from the Project's node_modules.\n   * @param opts.linkDevDeps - Include linking devDependencies from the Project's node_modules.\n   * @returns - The deserialized Project.\n   */\n  static fromDir(baseDir: string, opts?: ReadDirOpts): Project {\n    let project = new Project();\n    project.readSync(baseDir, opts);\n    return project;\n  }\n\n  /**\n   * Merges an object containing a directory represention with the existing files.\n   *\n   * @param dirJSON - An object containing a directory representation to merge.\n   */\n  mergeFiles(dirJSON: fixturify.DirJSON) {\n    this.files = deepmerge(this.files, dirJSON);\n  }\n\n  /**\n   * Writes the existing files property containing a directory representation to the tmp directory.\n   *\n   * @param dirJSON? - An optional object containing a directory representation to write.\n   */\n  async write(dirJSON?: fixturify.DirJSON): Promise<void> {\n    if (dirJSON) {\n      this.mergeFiles(dirJSON);\n    }\n\n    await this.writeProject();\n    await this.binLinks();\n  }\n\n  addDependency(\n    name?: string,\n    version?: string,\n    args?: Omit<ProjectArgs, 'name' | 'version'>,\n    projectCallback?: ProjectCallback\n  ): Project;\n  addDependency(name?: string, version?: string, projectCallback?: ProjectCallback): Project;\n  addDependency(name?: string, args?: Omit<ProjectArgs, 'name'>, projectCallback?: ProjectCallback): Project;\n  addDependency(args?: ProjectArgs, projectCallback?: ProjectCallback): Project;\n  addDependency(args?: Project, projectCallback?: ProjectCallback): Project;\n  /**\n   * Adds a dependency to the Project's package.json.\n   *\n   * @returns - The Project instance.\n   */\n  addDependency(\n    first?: string | ProjectArgs | Project,\n    second?: string | Omit<ProjectArgs, 'name'> | ProjectCallback,\n    third?: Omit<ProjectArgs, 'name' | 'version'> | ProjectCallback,\n    fourth?: ProjectCallback\n  ): Project {\n    let projectCallback;\n\n    const arity = arguments.length;\n    if (arity > 1) {\n      fourth;\n      const maybeProjectCallback = arguments[arity - 1];\n      if (isProjectCallback(maybeProjectCallback)) {\n        projectCallback = maybeProjectCallback;\n      }\n    }\n\n    if (isProjectCallback(second)) {\n      second = undefined;\n    }\n    if (isProjectCallback(third)) {\n      third = undefined;\n    }\n\n    return this.addDep(first, second, third, '_dependencies', projectCallback);\n  }\n\n  /**\n   * Adds a devDependency to the Project's package.json.\n   *\n   * @returns - The Project instance.\n   */\n  addDevDependency(\n    name?: string,\n    version?: string,\n    args?: Omit<ProjectArgs, 'name' | 'version'>,\n    projectCallback?: ProjectCallback\n  ): Project;\n  addDevDependency(name?: string, version?: string, projectCallback?: ProjectCallback): Project;\n  addDevDependency(name?: string, args?: Omit<ProjectArgs, 'name'>, projectCallback?: ProjectCallback): Project;\n  addDevDependency(args?: ProjectArgs, projectCallback?: ProjectCallback): Project;\n  addDevDependency(args?: Project, projectCallback?: ProjectCallback): Project;\n  addDevDependency(\n    first?: string | ProjectArgs | Project,\n    second?: string | Omit<ProjectArgs, 'name'> | ProjectCallback,\n    third?: Omit<ProjectArgs, 'name' | 'version'> | ProjectCallback,\n    fourth?: ProjectCallback\n  ): Project {\n    let projectCallback;\n\n    const arity = arguments.length;\n    if (arity > 1) {\n      fourth;\n      const maybeProjectCallback = arguments[arity - 1];\n      if (isProjectCallback(maybeProjectCallback)) {\n        projectCallback = maybeProjectCallback;\n      }\n    }\n\n    if (isProjectCallback(second)) {\n      second = undefined;\n    }\n    if (isProjectCallback(third)) {\n      third = undefined;\n    }\n\n    return this.addDep(first, second, third, '_devDependencies', projectCallback);\n  }\n\n  /**\n   * Removes a dependency to the Project's package.json.\n   *\n   * @param name - The name of the dependency to remove.\n   */\n  removeDependency(name: string) {\n    delete this._dependencies[name];\n    this.dependencyLinks.delete(name);\n    this.linkIsDevDependency.delete(name);\n  }\n\n  /**\n   * Removes a devDependency.\n   *\n   * @param name - The name of the devDependency to remove.\n   */\n  removeDevDependency(name: string) {\n    delete this._devDependencies[name];\n    this.dependencyLinks.delete(name);\n    this.linkIsDevDependency.delete(name);\n  }\n\n  /**\n   * Links a dependency.\n   *\n   * @param name - The name of the dependency to link.\n   */\n  linkDependency(name: string, opts: LinkParams): void {\n    this.removeDependency(name);\n    this.removeDevDependency(name);\n    this.dependencyLinks.set(name, opts);\n  }\n\n  /**\n   * Links a devDependency.\n   *\n   * @param name - The name of the dependency to link.\n   */\n  linkDevDependency(name: string, opts: LinkParams) {\n    this.linkDependency(name, opts);\n    this.linkIsDevDependency.add(name);\n  }\n\n  /**\n   * @returns - An array of the dependencies for this Projct.\n   */\n  dependencyProjects() {\n    return Object.keys(this._dependencies).map(dependency => this._dependencies[dependency]);\n  }\n\n  /**\n   * @returns - An array of the devDependencies for this Projct.\n   */\n  devDependencyProjects() {\n    return Object.keys(this._devDependencies).map(dependency => this._devDependencies[dependency]);\n  }\n\n  /**\n   * @returns - The cloned Project.\n   */\n  clone(): Project {\n    let cloned: Project = new (this.constructor as typeof Project)();\n    cloned.pkg = JSON.parse(JSON.stringify(this.pkg));\n    cloned.files = JSON.parse(JSON.stringify(this.files));\n    for (let [name, depProject] of Object.entries(this._dependencies)) {\n      cloned._dependencies[name] = depProject.clone();\n    }\n    for (let [name, depProject] of Object.entries(this._devDependencies)) {\n      cloned._devDependencies[name] = depProject.clone();\n    }\n    cloned.dependencyLinks = new Map(this.dependencyLinks);\n    cloned.linkIsDevDependency = new Set(this.linkIsDevDependency);\n    cloned.requestedRange = this.requestedRange;\n    return cloned;\n  }\n\n  /**\n   * Disposes of the tmp directory that the Project is stored in.\n   */\n  dispose() {\n    if (this._tmp) {\n      this._tmp.removeCallback();\n    }\n  }\n\n  private async writeProject() {\n    // this recurses through all our dependent Projects in three phases\n\n    // first every package gets assigned its base dir\n    this.assignBaseDirs();\n\n    let resolvedLinksMap = new Map();\n\n    await this.discoverWorkspaces();\n\n    // then we write out all the files, including their package.jsons. Since the\n    // requeste ranges of the dependencies in package.json default to the actual\n    // discovered dependencies, this step also resolves dependencies.\n    this.writeFiles(resolvedLinksMap);\n\n    // only after all the files are in place for Projects that we are creating\n    // do we handle creating symlinks and/or hard links to existing packages and\n    // between Projects.\n    await this.finalizeWrite(resolvedLinksMap);\n  }\n\n  private assignBaseDirs() {\n    this.baseDir;\n    for (let depList of [this.dependencyProjects(), this.devDependencyProjects()]) {\n      for (let dep of depList) {\n        dep.baseDir = path.join(this.baseDir, 'node_modules', dep.name);\n        dep.assignBaseDirs();\n      }\n    }\n  }\n\n  private writeFiles(resolvedLinksMap: Map<Project, ResolvedLinks>) {\n    fixturify.writeSync(this.baseDir, this.files);\n    for (let depList of [this.dependencyProjects(), this.devDependencyProjects()]) {\n      for (let dep of depList) {\n        dep.writeFiles(resolvedLinksMap);\n      }\n    }\n    let resolvedLinks = this.resolveLinks();\n    fs.outputJSONSync(path.join(this.baseDir, 'package.json'), this.pkgJSONWithDeps(resolvedLinks), { spaces: 2 });\n    resolvedLinksMap.set(this, resolvedLinks);\n  }\n\n  private async finalizeWrite(resolvedLinksMap: Map<Project, ResolvedLinks>) {\n    for (let [name, { dir: target }] of resolvedLinksMap.get(this)!) {\n      await this.writeLinkedPackage(name, target, path.join(this.baseDir, 'node_modules', name));\n    }\n    for (let depList of [this.dependencyProjects(), this.devDependencyProjects()]) {\n      for (let dep of depList) {\n        await dep.finalizeWrite(resolvedLinksMap);\n      }\n    }\n  }\n\n  private resolveLinks(): ResolvedLinks {\n    return new Map(\n      [...this.dependencyLinks.entries()].map(([name, opts]) => {\n        let dir: string;\n        if ('baseDir' in opts) {\n          let pkgJSONPath = resolvePackagePath(opts.resolveName || name, opts.baseDir, this.resolutionCache);\n          if (!pkgJSONPath) {\n            throw new Error(`failed to locate ${opts.resolveName || name} in ${opts.baseDir}`);\n          }\n          dir = path.dirname(pkgJSONPath);\n        } else if ('target' in opts) {\n          dir = opts.target;\n        } else {\n          dir = opts.project.baseDir;\n        }\n\n        let requestedRange: string;\n        if (opts.requestedRange) {\n          requestedRange = opts.requestedRange;\n        } else if ('target' in opts || 'baseDir' in opts) {\n          requestedRange = fs.readJsonSync(path.join(dir, 'package.json')).version;\n        } else {\n          requestedRange = opts.project.version;\n        }\n\n        return [name, { requestedRange, dir }];\n      })\n    );\n  }\n\n  private async binLinks() {\n    let nodeModules = path.join(this.baseDir, 'node_modules');\n    for (const { pkg, path } of readPackages(nodeModules)) {\n      await binLinks({ pkg, path, top: false, global: false, force: true });\n    }\n  }\n\n  private transitivePeersCache = new Map<string, Set<string>>();\n\n  private transitivePeers(dir: string): Set<string> {\n    let peers = this.transitivePeersCache.get(dir);\n    if (peers) {\n      return peers;\n    }\n\n    peers = new Set<string>();\n    // we prefill the cache before recursing so that we never get trapped in a\n    // cycle.\n    this.transitivePeersCache.set(dir, peers);\n\n    let pkg = PackageCache.shared('fixturify-project', this.baseDir).get(dir);\n    let deps = pkg.dependencies;\n\n    for (let dep of deps) {\n      if (pkg.categorizeDependency(dep.name) === 'dependencies') {\n        for (let peer of this.transitivePeers(dep.root)) {\n          if (pkg.hasDependency(peer)) {\n            // we satisfied our dep's peer requirement, either with a\n            // non-peer-dep (in which case it's definitely not in our\n            // transitivePeers) or with our own peerDep (in which case it will\n            // end up handled below when we look at our own peerDeps)\n          } else {\n            // dep has a peer requirement that we don't satsify, so that makes\n            // it part of our own transitivePeers.\n            peers.add(peer);\n          }\n        }\n      }\n    }\n\n    for (let dep of deps) {\n      if (pkg.categorizeDependency(dep.name) === 'peerDependencies') {\n        // our own direct peer deps are also part of our transitive peers\n        peers.add(dep.name);\n      }\n    }\n    return peers;\n  }\n\n  private async writeLinkedPackage(name: string, target: string, destination: string) {\n    let targetPkg = fs.readJsonSync(`${target}/package.json`);\n    let peers = this.transitivePeers(target);\n\n    if (peers.size === 0) {\n      // no peerDeps, so we can just symlink the whole package\n      fs.ensureSymlinkSync(target, destination, 'dir');\n      return;\n    }\n\n    // need to reproduce the package structure in our own location\n    await this.hardLinkContents(target, targetPkg, destination);\n\n    // This Set deduplicates things that happen to appear in both dependencies\n    // and peerDependencies so that we don't try to link the same dep twice,\n    // causing EEXIST failures.\n    let depsToLink = new Set<string>();\n\n    for (let section of ['dependencies', 'peerDependencies']) {\n      if (targetPkg[section]) {\n        for (let depName of Object.keys(targetPkg[section])) {\n          if (peers.has(depName)) {\n            continue;\n          }\n          depsToLink.add(depName);\n        }\n      }\n    }\n\n    // collect a list of optional peers\n    let optionalPeers = [];\n    for (let depName of Object.keys(targetPkg['peerDependenciesMeta'] ?? {})) {\n      if (targetPkg['peerDependenciesMeta'][depName]?.optional === true) {\n        optionalPeers.push(depName);\n      }\n    }\n\n    for (let depName of depsToLink) {\n      let depTarget = resolvePackagePath(depName, target, this.resolutionCache);\n\n      if (!depTarget && optionalPeers.includes(depName)) {\n        // don't link or error about missing optional peer deps\n        continue;\n      }\n\n      if (!depTarget) {\n        throw new Error(\n          `[FixturifyProject] package ${name} in ${target} depends on ${depName} but we could not resolve it`\n        );\n      }\n      await this.writeLinkedPackage(depName, path.dirname(depTarget), path.join(destination, 'node_modules', depName));\n    }\n  }\n\n  private knownWorkspaces: Map<string, boolean> = new Map();\n\n  private async discoverWorkspaces(): Promise<void> {\n    for (let opts of this.dependencyLinks.values()) {\n      if (!('baseDir' in opts)) {\n        continue;\n      }\n      let dir = opts.baseDir;\n      if (this.knownWorkspaces.has(dir)) {\n        continue;\n      }\n      let top = await findWorkspaceDir(dir);\n      if (top) {\n        let packages = await findWorkspacePackages(top);\n        for (let { dir } of packages) {\n          this.knownWorkspaces.set(dir, true);\n        }\n        if (!this.knownWorkspaces.has(dir)) {\n          // the dir is not itself one of the workspace packages but was nested\n          // within the monorepo. We don't need to recheck it, so make sure it\n          // goes into the map.\n          this.knownWorkspaces.set(dir, false);\n        }\n      } else {\n        this.knownWorkspaces.set(dir, false);\n      }\n    }\n  }\n\n  private async publishedPackageContents(packageDir: string, pkgJSON: any): Promise<string[]> {\n    if (this.knownWorkspaces.get(packageDir)) {\n      // when we know that a package is under development, we determine its\n      // files the same way \"pnpm pack\" would.\n      return await packlist(packageDir, { packageJsonCache: { packageDir: pkgJSON } });\n    }\n    // when it's not under development (it was installed by the package\n    // manager), we can't really use \"pnpm pack\", because the inputs to that\n    // process include files that are not necessarily themselves packed. But we\n    // also don't need to, because what we see on disk is necessarily the\n    // published contents already.\n    return walkSync(packageDir, { directories: false, ignore: ['node_modules'] });\n  }\n\n  private async hardLinkContents(source: string, pkgJSON: any, destination: string) {\n    fs.ensureDirSync(destination);\n    for (let relativePath of await this.publishedPackageContents(source, pkgJSON)) {\n      fs.ensureDirSync(path.dirname(path.join(destination, relativePath)));\n      this.hardLinkFile(path.join(source, relativePath), path.join(destination, relativePath));\n    }\n  }\n\n  private hardLinkFile(source: string, destination: string) {\n    if (this.usingHardLinks) {\n      try {\n        fs.linkSync(source, destination);\n        return;\n      } catch (err: any) {\n        if (err.code === 'EEXIST') {\n          debugger;\n        }\n        if (err.code === 'EXDEV') {\n          this.usingHardLinks = false;\n        }\n      }\n    }\n    fs.copyFileSync(source, destination, fs.constants.COPYFILE_FICLONE | fs.constants.COPYFILE_EXCL);\n  }\n\n  private readSync(baseDir: string, opts?: ReadDirOpts): void {\n    const files = fixturify.readSync(baseDir, {\n      // when linking deps, we don't need to crawl all of node_modules\n      ignore: opts?.linkDeps || opts?.linkDevDeps ? ['node_modules'] : [],\n    });\n\n    this.pkg = deserializePackageJson(getFile(files, 'package.json'));\n    this.requestedRange = this.version;\n    delete files['package.json'];\n    this.files = files;\n\n    if (opts?.linkDeps || opts?.linkDevDeps) {\n      if (this.pkg.dependencies) {\n        for (let dep of Object.keys(this.pkg.dependencies)) {\n          this.linkDependency(dep, { baseDir });\n        }\n      }\n      if (this.pkg.devDependencies && opts.linkDevDeps) {\n        for (let dep of Object.keys(this.pkg.devDependencies)) {\n          this.linkDevDependency(dep, { baseDir });\n        }\n      }\n    } else {\n      const nodeModules = getFolder(files, 'node_modules');\n      delete files['node_modules'];\n      keys(this.pkg.dependencies).forEach(dependency => {\n        this.addDependency(\n          new (this.constructor as typeof Project)({ files: unwrapPackageName(nodeModules, dependency) })\n        );\n      });\n      keys(this.pkg.devDependencies).forEach(dependency => {\n        this.addDevDependency(\n          new (this.constructor as typeof Project)({ files: unwrapPackageName(nodeModules, dependency) })\n        );\n      });\n    }\n  }\n\n  private addDep(\n    first: string | ProjectArgs | Project | undefined,\n    second: string | Omit<ProjectArgs, 'name'> | undefined,\n    third: Omit<ProjectArgs, 'name' | 'version'> | undefined,\n    target: '_dependencies' | '_devDependencies',\n    projectCallback?: ProjectCallback\n  ): Project {\n    let dep;\n    if (first == null) {\n      dep = new Project();\n    } else if (typeof first === 'string') {\n      let name = first;\n      if (typeof second === 'string') {\n        let version = second;\n        dep = new Project(name, version, third, projectCallback);\n      } else {\n        dep = new Project(name, second, projectCallback);\n      }\n    } else if ('isDependency' in first) {\n      dep = first;\n    } else {\n      dep = new Project(first, projectCallback);\n    }\n\n    this[target][dep.name] = dep;\n    this.dependencyLinks.delete(dep.name);\n    this.linkIsDevDependency.delete(dep.name);\n\n    if (isProjectCallback(projectCallback)) {\n      projectCallback(dep);\n    }\n    return dep;\n  }\n\n  private pkgJSONWithDeps(resolvedLinks: Map<string, { requestedRange: string; dir: string }>): PackageJson {\n    let dependencies = this.depsToObject(this.dependencyProjects());\n    let devDependencies = this.depsToObject(this.devDependencyProjects());\n    for (let [name, { requestedRange }] of resolvedLinks) {\n      if (requestedRange === undefined) {\n        throw new Error(\n          `No version found for package ${name}. All dependencies must have both a name and version in their package.json.`\n        );\n      }\n      if (this.linkIsDevDependency.has(name)) {\n        devDependencies[name] = requestedRange;\n      } else {\n        dependencies[name] = requestedRange;\n      }\n    }\n    return Object.assign(this.pkg, {\n      dependencies,\n      devDependencies,\n    });\n  }\n\n  private depsToObject(deps: Project[]) {\n    let obj: { [name: string]: string } = {};\n    deps.forEach(dep => (obj[dep.name] = dep.requestedRange));\n    return obj;\n  }\n}\n\nfunction deserializePackageJson(serialized: string): PackageJson {\n  return JSON.parse(serialized);\n}\n\nfunction keys(object: any) {\n  if (object !== null && (typeof object === 'object' || Array.isArray(object))) {\n    return Object.keys(object);\n  } else {\n    return [];\n  }\n}\n\nfunction isProjectCallback(maybe: ProjectCallback | any): maybe is ProjectCallback {\n  return typeof maybe === 'function';\n}\n\nfunction getString<Obj extends Object, KeyOfObj extends keyof Obj>(\n  obj: Obj,\n  propertyName: KeyOfObj,\n  errorMessage?: string\n): string {\n  const value = obj[propertyName];\n  if (typeof value === 'string') {\n    return value;\n  } else {\n    throw new TypeError(errorMessage || `expected 'string' but got '${typeof value}'`);\n  }\n}\n\nfunction getFile<Dir extends fixturify.DirJSON, FileName extends keyof Dir>(dir: Dir, fileName: FileName): string {\n  const value = dir[fileName];\n  if (typeof value === 'string') {\n    return value;\n  } else if (typeof value === 'object' && value !== null) {\n    throw new TypeError(`Expected a file for name '${String(fileName)}' but got a 'Folder'`);\n  } else {\n    throw new TypeError(`Expected a file for name '${String(fileName)}' but got '${typeof value}'`);\n  }\n}\n\nfunction getFolder<Dir extends fixturify.DirJSON, FileName extends keyof Dir>(\n  dir: Dir,\n  fileName: FileName\n): fixturify.DirJSON {\n  const value = dir[fileName];\n\n  if (isDirJSON(value)) {\n    return value;\n  } else if (typeof value === 'string') {\n    throw new TypeError(`Expected a file for name '${String(fileName)}' but got 'File'`);\n  } else {\n    throw new TypeError(`Expected a folder for name '${String(fileName)}' but got '${typeof value}'`);\n  }\n}\n\nfunction isDirJSON(value: any): value is fixturify.DirJSON {\n  return typeof value === 'object' && value !== null;\n}\n\nfunction getPackageName(pkg: PackageJson): string {\n  return getString(pkg, 'name', `package.json is missing a name.`);\n}\n\nfunction getPackageVersion(pkg: PackageJson): string {\n  return getString(pkg, 'version', `${getPackageName(pkg)}'s package.json is missing a version.`);\n}\n\nfunction parseScoped(name: string) {\n  let matched = name.match(/(@[^@\\/]+)\\/(.*)/);\n  if (matched) {\n    return {\n      scope: matched[1],\n      name: matched[2],\n    };\n  }\n  return null;\n}\n\nfunction unwrapPackageName(obj: any, packageName: string): fixturify.DirJSON {\n  let scoped = parseScoped(packageName);\n  if (scoped) {\n    return getFolder(getFolder(obj, scoped.scope), scoped.name);\n  }\n  return getFolder(obj, packageName);\n}\n\nfunction isObject(e: unknown): e is Object {\n  return e !== null && typeof e === 'object' && !Array.isArray(e);\n}\n\nfunction isErrnoException(e: unknown): e is NodeJS.ErrnoException {\n  return isObject(e) && 'code' in e;\n}\n\nfunction readString(name: string): string | undefined {\n  try {\n    return fs.readFileSync(name, 'utf8');\n  } catch (e) {\n    if (isErrnoException(e)) {\n      if (e.code === 'ENOENT' || e.code === 'EISDIR') {\n        return;\n      }\n    }\n    throw e;\n  }\n}\n\nfunction readdir(name: string): string[] {\n  try {\n    return fs.readdirSync(name);\n  } catch (e) {\n    if (isErrnoException(e)) {\n      if (e.code === 'ENOENT' || e.code === 'ENOTDIR') {\n        return [];\n      }\n    }\n    throw e;\n  }\n}\n\nfunction readPackage(dir: string | undefined): { pkg: PackageJson; path: string } | undefined {\n  if (dir) {\n    const fileName = path.join(dir, 'package.json');\n    const content = readString(fileName);\n    if (content) {\n      return { pkg: deserializePackageJson(content), path: dir };\n    }\n  }\n  return;\n}\n\nfunction readPackages(modulesPath: string): { pkg: PackageJson; path: string }[] {\n  const pkgs: { pkg: PackageJson; path: string }[] = [];\n  for (const name of readdir(modulesPath)) {\n    if (name.startsWith('@')) {\n      const scopePath = path.join(modulesPath, name);\n      for (const name of readdir(scopePath)) {\n        const pkg = readPackage(path.join(scopePath, name));\n        if (pkg) pkgs.push(pkg);\n      }\n    } else {\n      const pkg = readPackage(path.join(modulesPath, name));\n      if (pkg) pkgs.push(pkg);\n    }\n  }\n  return pkgs;\n}\n\nexport type LinkParams =\n  | { baseDir: string; resolveName?: string; requestedRange?: string }\n  | { target: string; requestedRange?: string }\n  | { project: Project; requestedRange?: string };\n\ntype ResolvedLinks = Map<string, { dir: string; requestedRange: string }>;\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n  typeof document === 'undefined'\n    ? new URL('file:' + __filename).href\n    : (document.currentScript && document.currentScript.src) ||\n      new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":"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","names":["require","tmp","CacheGroup","deepmerge","fs","path","fixturify","resolvePackagePath","binLinks","dir","walkSync","name"]}