{
  "version": 3,
  "sources": ["../../../../src/packages/npm-package-arg/index.ts"],
  "sourcesContent": ["import os from 'node:os';\nimport path from 'node:path';\nimport process from 'node:process';\nimport HostedGit from 'hosted-git-info';\nimport validatePackageName from 'validate-npm-package-name';\nimport semver from 'semver';\n\n// @ts-expect-error Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.ts(7017)\nconst isWindows: boolean = process.platform === 'win32' || global.FAKE_WINDOWS;\n\nconst hasSlashes = isWindows ? /[/\\\\]/ : /\\//;\n\nconst isURL = /^(?:git\\+)?[a-z]+:/i;\n\nconst isFilename = /\\.(?:tgz|tar.gz|tar)$/i;\n\nexport function npa(arg: Result | string, where?: string | undefined): Result {\n  let name: string | undefined;\n  let spec: string | undefined;\n\n  if (typeof arg === 'object') {\n    if (\n      arg instanceof Result &&\n      (typeof where === 'undefined' || where === arg.where)\n    ) {\n      return arg;\n    }\n\n    if (typeof arg.name !== 'undefined' && arg.rawSpec) {\n      return resolve(arg.name, arg.rawSpec, where ?? arg.where);\n    }\n\n    return npa(arg.raw ?? '', where ?? arg.where);\n  }\n\n  const nameEndsAt = arg.startsWith('@')\n    ? arg.slice(1).indexOf('@') + 1\n    : arg.indexOf('@');\n\n  const namePart = nameEndsAt > 0 ? arg.slice(0, nameEndsAt) : arg;\n\n  if (isURL.test(arg)) {\n    spec = arg;\n  } else if (\n    !namePart.startsWith('@') &&\n    (hasSlashes.test(namePart) || isFilename.test(namePart))\n  ) {\n    spec = arg;\n  } else if (nameEndsAt > 0) {\n    name = namePart;\n\n    spec = arg.slice(nameEndsAt + 1);\n  } else {\n    const valid = validatePackageName(arg);\n\n    if (valid.validForOldPackages) {\n      name = arg;\n    } else {\n      spec = arg;\n    }\n  }\n\n  return resolve(name, spec, where, arg);\n}\n\nconst isFilespec = isWindows\n  ? /^(?:\\.|~\\/|[/\\\\]|[A-Za-z]:)/\n  : /^(?:\\.|~\\/|\\/|[A-Za-z]:)/;\n\nexport function resolve(\n  name?: string | undefined,\n  spec?: string | undefined,\n  where?: string | undefined,\n  arg?: string | undefined\n): Result {\n  const res = new Result({\n    name,\n    raw: arg,\n    rawSpec: spec,\n    fromArgument: typeof arg !== 'undefined',\n  });\n\n  if (typeof name === 'string') {\n    res.setName(name);\n  }\n\n  if (\n    typeof spec === 'string' &&\n    (isFilespec.test(spec) || /^file:/i.test(spec))\n  ) {\n    return fromFile(res, where);\n  }\n\n  if (typeof spec === 'string' && spec.startsWith('npm:')) {\n    return Object.assign<\n      Result,\n      {\n        alias?: string | undefined;\n        raw?: string | undefined;\n        rawSpec: string;\n      }\n    >(npa(spec.substr(4), where), {\n      alias: name,\n      raw: res.raw,\n      rawSpec: res.rawSpec,\n    });\n  }\n\n  if (typeof spec === 'string') {\n    const hosted = HostedGit.fromUrl(spec, {\n      noGitPlus: true,\n      noCommittish: true,\n    });\n\n    if (typeof hosted !== 'undefined') {\n      return fromHostedGit(res, hosted);\n    }\n  }\n\n  if (typeof spec === 'string' && isURL.test(spec)) {\n    return fromURL(res);\n  }\n\n  if (\n    typeof spec === 'string' &&\n    (hasSlashes.test(spec) || isFilename.test(spec))\n  ) {\n    return fromFile(res, where);\n  }\n\n  return fromRegistry(res);\n}\n\nfunction invalidPackageName(name: string, valid: { errors: string[] }): Error {\n  const err = new Error(\n    `Invalid package name \"${name}\": ${valid.errors.join('; ')}`\n  );\n\n  // @ts-expect-error Property 'code' does not exist on type 'Error'.ts(2339)\n  err.code = 'EINVALIDPACKAGENAME';\n\n  return err;\n}\n\nfunction invalidTagName(name: string): Error {\n  const err = new Error(\n    `Invalid tag name \"${name}\": Tags may not have any characters that encodeURIComponent encodes.`\n  );\n\n  // @ts-expect-error Property 'code' does not exist on type 'Error'.ts(2339)\n  err.code = 'EINVALIDTAGNAME';\n\n  return err;\n}\n\nexport class Result {\n  type?: string | undefined;\n  registry?: boolean | undefined;\n  where?: string | undefined;\n  raw?: string | undefined;\n  name?: string | undefined;\n  escapedName?: string | undefined;\n  scope?: string | undefined;\n  rawSpec: string;\n  saveSpec?: string | undefined;\n  fetchSpec?: string | undefined;\n  gitRange?: string | undefined;\n  gitCommittish?: string | undefined;\n  hosted?: HostedGit | undefined;\n\n  constructor(opts: {\n    type?: string | undefined;\n    registry?: boolean | undefined;\n    where?: string | undefined;\n    raw?: string | undefined;\n    name?: string | undefined;\n    rawSpec?: string | undefined;\n    saveSpec?: string | undefined;\n    fetchSpec?: string | undefined;\n    gitRange?: string | undefined;\n    gitCommittish?: string | undefined;\n    hosted?: HostedGit | undefined;\n    fromArgument?: boolean | undefined;\n  }) {\n    this.type = opts.type;\n    this.registry = opts.registry;\n    this.where = opts.where;\n\n    if (typeof opts.raw === 'undefined') {\n      this.raw =\n        typeof opts.name === 'string'\n          ? `${opts.name}@${opts.rawSpec}`\n          : opts.rawSpec;\n    } else {\n      this.raw = opts.raw;\n    }\n\n    this.name = undefined;\n    this.escapedName = undefined;\n    this.scope = undefined;\n\n    this.rawSpec = typeof opts.rawSpec === 'undefined' ? '' : opts.rawSpec;\n    this.saveSpec = opts.saveSpec;\n    this.fetchSpec = opts.fetchSpec;\n\n    if (typeof opts.name !== 'undefined') {\n      this.setName(opts.name);\n    }\n\n    this.gitRange = opts.gitRange;\n    this.gitCommittish = opts.gitCommittish;\n    this.hosted = opts.hosted;\n  }\n\n  setName(name: string): Result {\n    const valid = validatePackageName(name);\n\n    if (!valid.validForOldPackages) {\n      throw invalidPackageName(name, valid);\n    }\n\n    this.name = name;\n\n    this.scope = name.startsWith('@')\n      ? name.slice(0, name.indexOf('/'))\n      : undefined;\n\n    // scoped packages in couch must have slash url-encoded, e.g. @foo%2Fbar\n    this.escapedName = name.replace('/', '%2f');\n\n    return this;\n  }\n\n  toString(): string | undefined {\n    const full = [];\n\n    if (this.name != null && this.name !== '') {\n      full.push(this.name);\n    }\n\n    const spec = this.saveSpec ?? this.fetchSpec ?? this.rawSpec;\n\n    if (typeof spec !== 'undefined' && spec !== '') {\n      full.push(spec);\n    }\n\n    return full.length ? full.join('@') : this.raw;\n  }\n\n  toJSON(): Result {\n    const result = Object.assign({}, this);\n\n    // biome-ignore lint/performance/noDelete: <explanation>\n    delete result.hosted;\n\n    return result;\n  }\n}\n\nfunction setGitCommittish(res: Result, committish: string | undefined): Result {\n  if (\n    committish != null &&\n    committish.length >= 7 &&\n    committish.slice(0, 7) === 'semver:'\n  ) {\n    res.gitRange = decodeURIComponent(committish.slice(7));\n    res.gitCommittish = undefined;\n  } else {\n    res.gitCommittish = committish === '' ? undefined : committish;\n  }\n\n  return res;\n}\n\nconst isAbsolutePath = /^\\/|^[A-Za-z]:/;\n\nfunction resolvePath(where: string, spec: string): string {\n  if (isAbsolutePath.test(spec)) {\n    return spec;\n  }\n\n  return path.resolve(where, spec);\n}\n\nfunction isAbsolute(dir: string): boolean {\n  if (dir.startsWith('/')) {\n    return true;\n  }\n\n  if (/^[A-Za-z]:/.test(dir)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction fromFile(res: Result, where?: string | undefined) {\n  let newWhere = where;\n\n  if (typeof newWhere === 'undefined') {\n    newWhere = process.cwd();\n  }\n\n  res.type = isFilename.test(res.rawSpec) ? 'file' : 'directory';\n\n  res.where = newWhere;\n\n  const spec = res.rawSpec\n    .replace(/\\\\/g, '/')\n    .replace(/^file:\\/*([A-Za-z]:)/, '$1') // drive name paths on windows\n    .replace(/^file:(?:\\/*([./~]))?/, '$1');\n\n  if (/^~\\//.test(spec)) {\n    // this is needed for windows and for file:~/foo/bar\n\n    res.fetchSpec = resolvePath(os.homedir(), spec.slice(2));\n\n    res.saveSpec = `file:${spec}`;\n  } else {\n    res.fetchSpec = resolvePath(newWhere, spec);\n\n    res.saveSpec = isAbsolute(spec)\n      ? `file:${spec}`\n      : `file:${path.relative(newWhere, res.fetchSpec)}`;\n  }\n\n  return res;\n}\n\nfunction fromHostedGit(res: Result, hosted: HostedGit) {\n  res.type = 'git';\n\n  res.hosted = hosted;\n\n  res.saveSpec = hosted.toString({ noGitPlus: false, noCommittish: false });\n\n  res.fetchSpec =\n    hosted.getDefaultRepresentation() === 'shortcut'\n      ? undefined\n      : hosted.toString();\n\n  return setGitCommittish(res, hosted.committish);\n}\n\nfunction unsupportedURLType(protocol: string | null, spec: string) {\n  const err = new Error(`Unsupported URL Type \"${protocol ?? ''}\": ${spec}`);\n\n  // @ts-expect-error Property 'code' does not exist on type 'Error'.ts(2339)\n  err.code = 'EUNSUPPORTEDPROTOCOL';\n\n  return err;\n}\n\nfunction matchGitScp(\n  spec: string\n):\n  | false\n  | { fetchSpec: string | undefined; gitCommittish: string | undefined }\n  | null {\n  // git ssh specifiers are overloaded to also use scp-style git\n  // specifiers, so we have to parse those out and treat them special.\n  // They are NOT true URIs, so we can't hand them to `url.parse`.\n  //\n  // This regex looks for things that look like:\n  // git+ssh://git@my.custom.git.com:username/project.git#deadbeef\n  //\n  // ...and various combinations. The username in the beginning is *required*.\n  const matched = spec.match(\n    /^git\\+ssh:\\/\\/([^#:]+:[^#]+(?:\\.git)?)(?:#(.*))?$/i\n  );\n\n  return (\n    matched &&\n    !matched[1]?.match(/:\\d+\\/?.*$/i) && {\n      fetchSpec: matched[1],\n      gitCommittish: matched[2] ?? undefined,\n    }\n  );\n}\n\nfunction fromURL(res: Result): Result {\n  const urlparse = new URL(res.rawSpec);\n\n  res.saveSpec = res.rawSpec;\n  // check the protocol, and then see if it's git or not\n\n  switch (urlparse.protocol) {\n    case 'git:':\n    case 'git+http:':\n    case 'git+https:':\n    case 'git+rsync:':\n    case 'git+ftp:':\n    case 'git+file:':\n    case 'git+ssh:': {\n      res.type = 'git';\n\n      const match =\n        urlparse.protocol === 'git+ssh:' && matchGitScp(res.rawSpec);\n\n      if (typeof match === 'object' && match !== null) {\n        res.fetchSpec = match.fetchSpec;\n        res.gitCommittish = match.gitCommittish;\n      } else {\n        setGitCommittish(\n          res,\n          typeof urlparse.hash === 'undefined' ? '' : urlparse.hash.slice(1)\n        );\n\n        urlparse.protocol = urlparse.protocol.replace(/^git\\+/, '');\n\n        // @ts-expect-error The operand of a 'delete' operator must be optional.ts(2790)\n        // biome-ignore lint/performance/noDelete: <explanation>\n        delete urlparse.hash;\n\n        res.fetchSpec = urlparse.toString();\n      }\n\n      break;\n    }\n\n    case 'http:':\n    case 'https:': {\n      res.type = 'remote';\n      res.fetchSpec = res.saveSpec;\n      break;\n    }\n\n    default: {\n      throw unsupportedURLType(urlparse.protocol, res.rawSpec);\n    }\n  }\n\n  return res;\n}\n\nfunction fromRegistry(res: Result): Result {\n  res.registry = true;\n\n  const spec = res.rawSpec === '' ? 'latest' : res.rawSpec;\n\n  // no save spec for registry components as we save based on the fetched\n  // version, not on the argument so this can't compute that.\n  res.saveSpec = undefined;\n\n  res.fetchSpec = spec;\n\n  const version = semver.valid(spec, true);\n\n  const range = semver.validRange(spec, true);\n\n  if (version !== null) {\n    res.type = 'version';\n  } else if (range !== null) {\n    res.type = 'range';\n  } else {\n    if (encodeURIComponent(spec) !== spec) {\n      throw invalidTagName(spec);\n    }\n\n    res.type = 'tag';\n  }\n\n  return res;\n}\n"],
  "mappings": "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",
  "names": []
}
