{"version":3,"sources":["../../src/session/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,kBAAqB;AACvC,OAAO,KAAK,GAAG,mBAAsB;AAGrC,qBAAa,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM;IACxC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IAErB,OAAO,CAAC,SAAS,CAAsB;gBAE3B,OAAO,EAAE;QACnB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAChC;IAKK,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAWzD,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAmBvE,gBAAgB,CACpB,KAAK,EAAE,GAAG,CAAC,QAAQ,EACnB,IAAI,EAAE,GAAG,CAAC,oBAAoB,GAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAc1B,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK;CAqB3E","file":"query.d.ts","sourcesContent":["/**\n * @module \"ethpm/session\"\n */\n\nimport * as config from 'ethpm/config';\nimport * as pkg from 'ethpm/package';\n\n\nexport class Query<T extends config.Config> {\n  package: pkg.Package;\n\n  private workspace: config.Workspace<T>;\n\n  constructor(options: {\n    package: pkg.Package;\n    workspace: config.Workspace<T>;\n  }) {\n    this.package = options.package;\n    this.workspace = options.workspace;\n  }\n\n  async scope(dependencyName: pkg.PackageName): Promise<Query<T>> {\n    const dependency = await this.buildDependency(dependencyName);\n\n    const resolver = new Query({\n      package: dependency,\n      workspace: this.workspace,\n    });\n\n    return resolver;\n  }\n\n  async contractType(ref: pkg.ContractTypeReference): Promise<pkg.ContractType> {\n    const terms = ref.split(':');\n\n    const packages = terms.slice(0, -1);\n    const type = terms.slice(-1);\n\n    const [dependencyName, ...rest] = packages;\n\n    if (dependencyName) {\n      const subquery = await this.scope(dependencyName);\n      const innerRef = [...rest, type].join(':');\n\n      return await subquery.contractType(innerRef);\n    }\n\n    // plain type reference\n    return this.package.contractTypes[ref];\n  }\n\n  async contractInstance(\n    chain: pkg.ChainURI,\n    name: pkg.ContractInstanceName,\n  ): Promise<pkg.ContractInstance> {\n    const deployment = this.package.deployments.get(chain);\n    if (deployment === undefined) {\n      throw new Error(`Could not find deployment at chain ${chain.href}`);\n    }\n\n    const instance = deployment[name];\n    if (instance === undefined) {\n      throw new Error(`Could not find instance \"${name}\" on chain ${chain.href}`);\n    }\n\n    return instance;\n  }\n\n  async buildDependency(name: pkg.PackageName): Promise<pkg.Package> | never {\n    if (!('storage' in this.workspace)) {\n      throw new Error('Storage not configured!');\n    }\n\n    if (!('manifests' in this.workspace)) {\n      throw new Error('Manifests not configured!');\n    }\n\n    const workspace = <\n      config.Workspace<config.HasManifests & config.HasStorage>\n    > this.workspace;\n\n    const uri = this.package.buildDependencies[name];\n    const contents = await workspace.storage.read(uri);\n    if (contents !== undefined) {\n      return await workspace.manifests.read(contents);\n    }\n\n    throw new Error(`Could not find build dependency \"${name}\"`);\n  }\n}\n"]}