{
  "version": 3,
  "sources": ["../../../../src/packages/dependency-path/index.ts"],
  "sourcesContent": ["import { createShortHash } from '../crypto.hash/index.ts';\nimport type {\n  DepPath,\n  PkgResolutionId,\n  Registries,\n  PkgId,\n  PkgIdWithPatchHash,\n} from '../types/index.ts';\nimport semver from 'semver';\n\nexport function isAbsolute(dependencyPath: string): boolean {\n  return !dependencyPath.startsWith('/');\n}\n\nexport function indexOfPeersSuffix(depPath: string): {\n  peersIndex: number;\n  patchHashIndex: number;\n} {\n  if (!depPath.endsWith(')')) {\n    return { peersIndex: -1, patchHashIndex: -1 };\n  }\n\n  let open = 1;\n\n  for (let i = depPath.length - 2; i >= 0; i--) {\n    if (depPath[i] === '(') {\n      open--;\n    } else if (depPath[i] === ')') {\n      open++;\n    } else if (!open) {\n      if (depPath.substring(i + 1).startsWith('(patch_hash=')) {\n        return {\n          patchHashIndex: i + 1,\n          peersIndex: depPath.indexOf('(', i + 2),\n        };\n      }\n\n      return {\n        patchHashIndex: -1,\n        peersIndex: i + 1,\n      };\n    }\n  }\n\n  return { peersIndex: -1, patchHashIndex: -1 };\n}\n\nexport type ParsedDepPath = {\n  id: string;\n  peersSuffix: string;\n};\n\nexport function parseDepPath(relDepPath: string): ParsedDepPath {\n  const { peersIndex } = indexOfPeersSuffix(relDepPath);\n\n  if (peersIndex !== -1) {\n    return {\n      id: relDepPath.substring(0, peersIndex),\n      peersSuffix: relDepPath.substring(peersIndex),\n    };\n  }\n\n  return {\n    id: relDepPath,\n    peersSuffix: '',\n  };\n}\n\nexport function removeSuffix(relDepPath: string): string {\n  const { peersIndex, patchHashIndex } = indexOfPeersSuffix(relDepPath);\n\n  if (patchHashIndex !== -1) {\n    return relDepPath.substring(0, patchHashIndex);\n  }\n\n  if (peersIndex !== -1) {\n    return relDepPath.substring(0, peersIndex);\n  }\n\n  return relDepPath;\n}\n\nexport function getPkgIdWithPatchHash(depPath: DepPath): PkgIdWithPatchHash {\n  let pkgId: string = depPath;\n\n  const { peersIndex: sepIndex } = indexOfPeersSuffix(pkgId);\n\n  if (sepIndex !== -1) {\n    pkgId = pkgId.substring(0, sepIndex);\n  }\n\n  if (pkgId.includes(':')) {\n    pkgId = pkgId.substring(pkgId.indexOf('@', 1) + 1);\n  }\n\n  return pkgId as PkgIdWithPatchHash;\n}\n\nexport function tryGetPackageId(relDepPath: DepPath): PkgId {\n  let pkgId: string = relDepPath;\n\n  const { peersIndex, patchHashIndex } = indexOfPeersSuffix(pkgId);\n\n  const sepIndex = patchHashIndex === -1 ? peersIndex : patchHashIndex;\n\n  if (sepIndex !== -1) {\n    pkgId = pkgId.substring(0, sepIndex);\n  }\n\n  if (pkgId.includes(':')) {\n    pkgId = pkgId.substring(pkgId.indexOf('@', 1) + 1);\n  }\n\n  return pkgId as PkgId;\n}\n\nexport function getRegistryByPackageName(\n  registries: Registries,\n  packageName: string\n): string {\n  if (!packageName.startsWith('@')) {\n    return registries.default;\n  }\n\n  const scope = packageName.substring(0, packageName.indexOf('/'));\n\n  return registries[scope] ?? registries.default;\n}\n\nexport function refToRelative(\n  reference: string,\n  pkgName: string\n): DepPath | null {\n  if (reference.startsWith('link:')) {\n    return null;\n  }\n\n  if (reference.startsWith('@')) {\n    return reference as DepPath;\n  }\n\n  const atIndex = reference.indexOf('@');\n\n  if (atIndex === -1) {\n    return `${pkgName}@${reference}` as DepPath;\n  }\n\n  const colonIndex = reference.indexOf(':');\n\n  const bracketIndex = reference.indexOf('(');\n\n  if (\n    (colonIndex === -1 || atIndex < colonIndex) &&\n    (bracketIndex === -1 || atIndex < bracketIndex)\n  ) {\n    return reference as DepPath;\n  }\n\n  return `${pkgName}@${reference}` as DepPath;\n}\n\nexport type DependencyPath = {\n  name?: string | undefined;\n  peersSuffix?: string | undefined;\n  version?: string | undefined;\n  nonSemverVersion?: PkgResolutionId | undefined;\n  patchHash?: string | undefined;\n};\n\nexport function parse(dependencyPath: string): DependencyPath {\n  // eslint-disable-next-line: strict-type-predicates\n  if (typeof dependencyPath !== 'string') {\n    throw new TypeError(\n      `Expected \\`dependencyPath\\` to be of type \\`string\\`, got \\`${\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        dependencyPath === null ? 'null' : typeof dependencyPath\n      }\\``\n    );\n  }\n\n  const sepIndex = dependencyPath.indexOf('@', 1);\n\n  if (sepIndex === -1) {\n    return {};\n  }\n\n  const name = dependencyPath.substring(0, sepIndex);\n\n  let version = dependencyPath.substring(sepIndex + 1);\n\n  if (version) {\n    let peersSuffix: string | undefined;\n\n    let patchHash: string | undefined;\n\n    const { peersIndex, patchHashIndex } = indexOfPeersSuffix(version);\n\n    if (peersIndex !== -1 || patchHashIndex !== -1) {\n      if (peersIndex === -1) {\n        patchHash = version.substring(patchHashIndex);\n        version = version.substring(0, patchHashIndex);\n      } else if (patchHashIndex === -1) {\n        peersSuffix = version.substring(peersIndex);\n        version = version.substring(0, peersIndex);\n      } else {\n        patchHash = version.substring(patchHashIndex, peersIndex);\n        peersSuffix = version.substring(peersIndex);\n        version = version.substring(0, patchHashIndex);\n      }\n    }\n\n    if (semver.valid(version) !== null) {\n      return {\n        name,\n        peersSuffix,\n        version,\n        patchHash,\n      };\n    }\n\n    return {\n      name,\n      nonSemverVersion: version as PkgResolutionId,\n      peersSuffix,\n      patchHash,\n    };\n  }\n\n  return {};\n}\n\nexport function depPathToFilename(\n  depPath: string,\n  maxLengthWithoutHash: number\n): string {\n  let filename = depPathToFilenameUnescaped(depPath).replace(\n    /[\"#*/:<>?\\\\|]/g,\n    '+'\n  );\n\n  if (filename.includes('(')) {\n    filename = filename.replace(/\\)$/, '').replace(/\\)\\(|\\(|\\)/g, '_');\n  }\n\n  if (\n    filename.length > maxLengthWithoutHash ||\n    (filename !== filename.toLowerCase() && !filename.startsWith('file+'))\n  ) {\n    return `${filename.substring(0, maxLengthWithoutHash - 33)}_${createShortHash(filename)}`;\n  }\n\n  return filename;\n}\n\nfunction depPathToFilenameUnescaped(depPath: string): string {\n  let depPathUnescaped = depPath;\n\n  if (depPathUnescaped.indexOf('file:') !== 0) {\n    if (depPathUnescaped.startsWith('/')) {\n      depPathUnescaped = depPathUnescaped.substring(1);\n    }\n\n    const index = depPathUnescaped.indexOf('@', 1);\n\n    if (index === -1) {\n      return depPathUnescaped;\n    }\n\n    return `${depPathUnescaped.substring(0, index)}@${depPathUnescaped.slice(index + 1)}`;\n  }\n\n  return depPathUnescaped.replace(':', '+');\n}\n\nexport type PeerId = { name: string; version: string } | string;\n\nexport function createPeersDirSuffix(\n  peerIds: PeerId[],\n  maxLength = 1000\n): string {\n  let dirName = peerIds\n    .map((peerId: PeerId): string => {\n      if (typeof peerId !== 'string') {\n        return `${peerId.name}@${peerId.version}`;\n      }\n\n      if (peerId.startsWith('/')) {\n        return peerId.substring(1);\n      }\n\n      return peerId;\n    })\n    .sort()\n    .join(')(');\n\n  if (dirName.length > maxLength) {\n    dirName = createShortHash(dirName);\n  }\n\n  return `(${dirName})`;\n}\n"],
  "mappings": "AAAA,SAAS,uBAAuB;AAQhC,OAAO,YAAY;AAEZ,SAAS,WAAW,gBAAiC;AAC1D,SAAO,CAAC,eAAe,WAAW,GAAG;AACvC;AAEO,SAAS,mBAAmB,SAGjC;AACA,MAAI,CAAC,QAAQ,SAAS,GAAG,GAAG;AAC1B,WAAO,EAAE,YAAY,IAAI,gBAAgB,GAAG;AAAA,EAC9C;AAEA,MAAI,OAAO;AAEX,WAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,QAAI,QAAQ,CAAC,MAAM,KAAK;AACtB;AAAA,IACF,WAAW,QAAQ,CAAC,MAAM,KAAK;AAC7B;AAAA,IACF,WAAW,CAAC,MAAM;AAChB,UAAI,QAAQ,UAAU,IAAI,CAAC,EAAE,WAAW,cAAc,GAAG;AACvD,eAAO;AAAA,UACL,gBAAgB,IAAI;AAAA,UACpB,YAAY,QAAQ,QAAQ,KAAK,IAAI,CAAC;AAAA,QACxC;AAAA,MACF;AAEA,aAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,YAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,IAAI,gBAAgB,GAAG;AAC9C;AAOO,SAAS,aAAa,YAAmC;AAC9D,QAAM,EAAE,WAAW,IAAI,mBAAmB,UAAU;AAEpD,MAAI,eAAe,IAAI;AACrB,WAAO;AAAA,MACL,IAAI,WAAW,UAAU,GAAG,UAAU;AAAA,MACtC,aAAa,WAAW,UAAU,UAAU;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,aAAa;AAAA,EACf;AACF;AAEO,SAAS,aAAa,YAA4B;AACvD,QAAM,EAAE,YAAY,eAAe,IAAI,mBAAmB,UAAU;AAEpE,MAAI,mBAAmB,IAAI;AACzB,WAAO,WAAW,UAAU,GAAG,cAAc;AAAA,EAC/C;AAEA,MAAI,eAAe,IAAI;AACrB,WAAO,WAAW,UAAU,GAAG,UAAU;AAAA,EAC3C;AAEA,SAAO;AACT;AAEO,SAAS,sBAAsB,SAAsC;AAC1E,MAAI,QAAgB;AAEpB,QAAM,EAAE,YAAY,SAAS,IAAI,mBAAmB,KAAK;AAEzD,MAAI,aAAa,IAAI;AACnB,YAAQ,MAAM,UAAU,GAAG,QAAQ;AAAA,EACrC;AAEA,MAAI,MAAM,SAAS,GAAG,GAAG;AACvB,YAAQ,MAAM,UAAU,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC;AAAA,EACnD;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,YAA4B;AAC1D,MAAI,QAAgB;AAEpB,QAAM,EAAE,YAAY,eAAe,IAAI,mBAAmB,KAAK;AAE/D,QAAM,WAAW,mBAAmB,KAAK,aAAa;AAEtD,MAAI,aAAa,IAAI;AACnB,YAAQ,MAAM,UAAU,GAAG,QAAQ;AAAA,EACrC;AAEA,MAAI,MAAM,SAAS,GAAG,GAAG;AACvB,YAAQ,MAAM,UAAU,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC;AAAA,EACnD;AAEA,SAAO;AACT;AAEO,SAAS,yBACd,YACA,aACQ;AACR,MAAI,CAAC,YAAY,WAAW,GAAG,GAAG;AAChC,WAAO,WAAW;AAAA,EACpB;AAEA,QAAM,QAAQ,YAAY,UAAU,GAAG,YAAY,QAAQ,GAAG,CAAC;AAE/D,SAAO,WAAW,KAAK,KAAK,WAAW;AACzC;AAEO,SAAS,cACd,WACA,SACgB;AAChB,MAAI,UAAU,WAAW,OAAO,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,WAAW,GAAG,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,UAAU,QAAQ,GAAG;AAErC,MAAI,YAAY,IAAI;AAClB,WAAO,GAAG,OAAO,IAAI,SAAS;AAAA,EAChC;AAEA,QAAM,aAAa,UAAU,QAAQ,GAAG;AAExC,QAAM,eAAe,UAAU,QAAQ,GAAG;AAE1C,OACG,eAAe,MAAM,UAAU,gBAC/B,iBAAiB,MAAM,UAAU,eAClC;AACA,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,OAAO,IAAI,SAAS;AAChC;AAUO,SAAS,MAAM,gBAAwC;AAE5D,MAAI,OAAO,mBAAmB,UAAU;AACtC,UAAM,IAAI;AAAA,MACR;AAAA,MAEE,mBAAmB,OAAO,SAAS,OAAO,cAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,eAAe,QAAQ,KAAK,CAAC;AAE9C,MAAI,aAAa,IAAI;AACnB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,OAAO,eAAe,UAAU,GAAG,QAAQ;AAEjD,MAAI,UAAU,eAAe,UAAU,WAAW,CAAC;AAEnD,MAAI,SAAS;AACX,QAAI;AAEJ,QAAI;AAEJ,UAAM,EAAE,YAAY,eAAe,IAAI,mBAAmB,OAAO;AAEjE,QAAI,eAAe,MAAM,mBAAmB,IAAI;AAC9C,UAAI,eAAe,IAAI;AACrB,oBAAY,QAAQ,UAAU,cAAc;AAC5C,kBAAU,QAAQ,UAAU,GAAG,cAAc;AAAA,MAC/C,WAAW,mBAAmB,IAAI;AAChC,sBAAc,QAAQ,UAAU,UAAU;AAC1C,kBAAU,QAAQ,UAAU,GAAG,UAAU;AAAA,MAC3C,OAAO;AACL,oBAAY,QAAQ,UAAU,gBAAgB,UAAU;AACxD,sBAAc,QAAQ,UAAU,UAAU;AAC1C,kBAAU,QAAQ,UAAU,GAAG,cAAc;AAAA,MAC/C;AAAA,IACF;AAEA,QAAI,OAAO,MAAM,OAAO,MAAM,MAAM;AAClC,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC;AACV;AAEO,SAAS,kBACd,SACA,sBACQ;AACR,MAAI,WAAW,2BAA2B,OAAO,EAAE;AAAA,IACjD;AAAA,IACA;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,eAAW,SAAS,QAAQ,OAAO,EAAE,EAAE,QAAQ,eAAe,GAAG;AAAA,EACnE;AAEA,MACE,SAAS,SAAS,wBACjB,aAAa,SAAS,YAAY,KAAK,CAAC,SAAS,WAAW,OAAO,GACpE;AACA,WAAO,GAAG,SAAS,UAAU,GAAG,uBAAuB,EAAE,CAAC,IAAI,gBAAgB,QAAQ,CAAC;AAAA,EACzF;AAEA,SAAO;AACT;AAEA,SAAS,2BAA2B,SAAyB;AAC3D,MAAI,mBAAmB;AAEvB,MAAI,iBAAiB,QAAQ,OAAO,MAAM,GAAG;AAC3C,QAAI,iBAAiB,WAAW,GAAG,GAAG;AACpC,yBAAmB,iBAAiB,UAAU,CAAC;AAAA,IACjD;AAEA,UAAM,QAAQ,iBAAiB,QAAQ,KAAK,CAAC;AAE7C,QAAI,UAAU,IAAI;AAChB,aAAO;AAAA,IACT;AAEA,WAAO,GAAG,iBAAiB,UAAU,GAAG,KAAK,CAAC,IAAI,iBAAiB,MAAM,QAAQ,CAAC,CAAC;AAAA,EACrF;AAEA,SAAO,iBAAiB,QAAQ,KAAK,GAAG;AAC1C;AAIO,SAAS,qBACd,SACA,YAAY,KACJ;AACR,MAAI,UAAU,QACX,IAAI,CAAC,WAA2B;AAC/B,QAAI,OAAO,WAAW,UAAU;AAC9B,aAAO,GAAG,OAAO,IAAI,IAAI,OAAO,OAAO;AAAA,IACzC;AAEA,QAAI,OAAO,WAAW,GAAG,GAAG;AAC1B,aAAO,OAAO,UAAU,CAAC;AAAA,IAC3B;AAEA,WAAO;AAAA,EACT,CAAC,EACA,KAAK,EACL,KAAK,IAAI;AAEZ,MAAI,QAAQ,SAAS,WAAW;AAC9B,cAAU,gBAAgB,OAAO;AAAA,EACnC;AAEA,SAAO,IAAI,OAAO;AACpB;",
  "names": []
}
