{"version":3,"sources":["../../src/utils/uri.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAa1B,qBAAa,QAAQ;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;gBAEZ,GAAG,EAAE,MAAM;IASvB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG;IAgC9B,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG;IAa5B,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG;CAU5B","file":"uri.d.ts","sourcesContent":["/**\n * @module \"ethpm/utils/uri\"\n */\n\nimport { URL } from 'url';\n\nconst SUPPORTED_CHAIN_IDS = [\n  1, // mainnet\n  3, // ropsten\n  4, // rinkeby\n  5, // goerli\n  42 // kovan\n]\n\n// scheme://address:chainId/packageName@version\n// i.e.\n// erc1319://snakecharmers.eth:1/dai@1.0.0\nexport class EthpmURI {\n  raw: string;\n  scheme: string;\n  address: string;\n  chainId: number;\n  packageName: string;\n  version: string;\n  namespacedAsset: string;\n\n  constructor(uri: string) {\n    const parsedURI = new URL(uri);\n    this.raw = uri;\n    this.scheme = EthpmURI.parseScheme(parsedURI);\n    this.chainId = EthpmURI.parseChainId(parsedURI);\n    this.address = parsedURI.hostname; // address or ensName\n    [this.packageName, this.version, this.namespacedAsset] = EthpmURI.parsePackageId(parsedURI);\n  }\n\n  static parsePackageId(url: URL) {\n    if (url.pathname.replace('/', '') !== '') {\n      const pathElements = url.pathname.split('/').filter((el) => el !== '');\n      const rawPackageId = pathElements[0]\n      const packageId = rawPackageId.split('@').filter((el) => el !== '');\n\n      if (rawPackageId.includes('@') && packageId.length !== 2) {\n        throw new Error(\n          `Invalid package ID: ${packageId}. URI must define a version if it contains '@'.`,\n        );\n      }\n      \n      let namespacedAsset;\n      const packageName = packageId[0];\n      var version = packageId[1];\n      if (!version) version = \"\";\n      if (pathElements.length > 1) {\n        namespacedAsset = pathElements.splice(1).join(\"/\");\n      } else {\n        namespacedAsset = \"\";\n      }\n      if (!version && namespacedAsset) {\n        throw new Error(\n          `Invalid package ID: ${packageId}. Version must be included to define a namespaced asset.`,\n        );\n      }\n      return [packageName, version, namespacedAsset];\n    } else {\n      return ['', '', ''];\n    }\n  }\n\n  static parseChainId(url: URL) {\n    const chainId = +url.port;\n    if (chainId === 1 || chainId === 0) {\n      return 1;\n    } else if (!SUPPORTED_CHAIN_IDS.includes(chainId)) {\n      throw new Error(\n        `Invalid chain ID: ${chainId}. Currently only mainnet is supported.`,\n      );\n    } else {\n      return chainId\n    }\n  }\n\n  static parseScheme(url: URL) {\n    const scheme = url.protocol.replace(/:+$/, '');\n    if (scheme !== 'erc1319' && scheme !== 'ethpm') {\n      throw new Error(\n        `Invalid scheme: ${scheme} found on uri: ${url}. Expected scheme to match \"ethpm\" or \"erc1319\".`,\n      );\n    } else {\n      return scheme;\n    }\n  }\n}\n"]}