{"version":3,"sources":["../../src/package/resolver/index.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,EAAE,WAAW,EAAE,2BAA2B;AAEjD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAqC,aAAsB;AACpF,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,UAAU,yBAAyB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;CAChC;AAED,qBAAa,QAAQ;IACZ,WAAW,EAAE,WAAW,CAAA;gBAEnB,WAAW,EAAE,WAAW;IAI9B,OAAO,CAAC,UAAU,EAAE,GAAG;CA6C9B;AAED,qBAAa,eAAe;IACnB,UAAU,EAAE,GAAG,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,iBAAiB,EAAE,yBAAyB,CAAA;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;gBAGrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,GAAG,EACf,eAAe,EAAE,OAAO,EACxB,iBAAiB,EAAE,yBAAyB,EAC5C,OAAO,EAAE,OAAO;CAQnB","file":"index.d.ts","sourcesContent":["/**\n * @module \"ethpm/package/resolver\"\n */\n\nimport { IpfsService } from 'ethpm/storage/ipfs';\nimport { v3 } from 'ethpm/manifests/v3';\nimport { Package, Sources, SourceWithContent, SourceWithUrls } from 'ethpm/package';\nimport { URL } from 'url';\n\ninterface ResolvedBuildDependencies {\n  [key: string]: ResolvedPackage;\n}\n\nexport class Resolver {\n  public ipfsBackend: IpfsService\n\n  constructor(ipfsService: IpfsService) {\n    this.ipfsBackend = ipfsService\n  }\n\n  async resolve(contentURI: URL) {\n    const rawManifest = await this.ipfsBackend.read(contentURI)\n    if (!rawManifest) {\n      throw new Error(\"Manifest at \" + contentURI + \" not found.\")\n    }\n    const originalPackage = await v3.read(rawManifest)\n    let sources: Sources = {}\n    let buildDependencies: ResolvedBuildDependencies = {}\n    \n    // resolve any content-addressed sources\n    if (originalPackage.sources) {\n      for (const sourceId in originalPackage.sources) {\n        if (Object.prototype.hasOwnProperty.call(originalPackage.sources[sourceId], 'urls')) {\n          const sourceObject = originalPackage.sources[sourceId] as SourceWithUrls\n          const source = await this.ipfsBackend.read(sourceObject['urls'][0] as URL)\n          if (source) {\n            sources[sourceId] = {\n              content: source,\n              type: \"solidity\", // should be optional\n              installPath: sourceId // should be optional\n            }\n          } else {\n            throw new Error(\"No source found at \" + originalPackage.sources[sourceId])\n          }\n        } else {\n          const sourceObject = originalPackage.sources[sourceId] as SourceWithContent\n          sources[sourceId] = {\n            content: sourceObject['content'],\n            type: \"solidity\",  // should be optional\n            installPath: sourceId  // should be optional\n          }\n        }\n      }\n    }\n\n    // resolve any build dependencies\n    if (originalPackage.buildDependencies) {\n      for (const key in originalPackage.buildDependencies) {\n        const url = originalPackage.buildDependencies[key]\n        const pkg = await this.resolve(url)\n        buildDependencies[key] = pkg\n      }\n    }\n    return new ResolvedPackage(rawManifest, contentURI, originalPackage, buildDependencies, sources)\n  }\n}\n\nexport class ResolvedPackage {\n  public contentURI: URL\n  public originalPackage: Package\n  public buildDependencies: ResolvedBuildDependencies\n  public rawManifest: string\n  public sources: Sources\n\n  constructor(\n    rawManifest: string,\n    contentURI: URL,\n    originalPackage: Package,\n    buildDependencies: ResolvedBuildDependencies,\n    sources: Sources\n  ) {\n    this.rawManifest = rawManifest\n    this.buildDependencies = buildDependencies\n    this.contentURI = contentURI\n    this.originalPackage = originalPackage\n    this.sources = sources\n  }\n}\n"]}