{"version":3,"sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAG3B,OAAO,KAAK,SAAS,6BAAgC;AACrD,OAAO,KAAK,OAAO,2BAA8B;AACjD,OAAO,KAAK,UAAU,8BAAiC;AACvD,OAAO,KAAK,SAAS,6BAAgC;AAErD,oBAAY,WAAW,CAAC,CAAC,GAAG,GAAG,IAC7B,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAAE,OAAO,EAAE,MAAM,SAAS,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAEpE,oBAAY,YAAY,GAAG;IAAE,SAAS,EAAE,GAAG,CAAA;CAAE,CAAC;AAC9C,oBAAY,UAAU,GAAG;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC;AAC1C,oBAAY,aAAa,GAAG;IAAE,UAAU,EAAE,GAAG,CAAA;CAAE,CAAC;AAChD,oBAAY,YAAY,GAAG;IAAE,SAAS,EAAE,GAAG,CAAA;CAAE,CAAC;AAC9C,oBAAY,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;AAEhF;;;GAGG;AACH,oBAAY,MAAM,GACd,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GACxD,YAAY,GAAG,UAAU,GACzB,YAAY,GAAG,aAAa,GAC5B,YAAY,GAAG,YAAY,GAC3B,UAAU,GAAG,aAAa,GAC1B,UAAU,GAAG,YAAY,GACzB,aAAa,GAAG,YAAY,GAC5B,YAAY,GAAG,UAAU,GAAG,aAAa,GACzC,YAAY,GAAG,UAAU,GAAG,YAAY,GACxC,YAAY,GAAG,aAAa,GAAG,YAAY,GAC3C,UAAU,GAAG,aAAa,GAAG,YAAY,GACzC,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAA;AAE5D,oBAAY,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAEjC,8BAAsB,SAAS,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;aAEX,IAAI,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAE1C,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;CAQ5C;AAED,oBAAY,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,GACX,CAAC,SAAS,WAAW,GAAG,SAAS,CAAC,OAAO,GACzC,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,OAAO,GACrC,CAAC,SAAS,YAAY,GAAG,UAAU,CAAC,OAAO,GAC3C,CAAC,SAAS,WAAW,GAAG,SAAS,CAAC,OAAO,GACzC,KAAK;CACR,CAAA;AAED,oBAAY,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI;KACxC,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtD,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;CAAE,CAAA","file":"config.d.ts","sourcesContent":["/**\n * @module \"ethpm/config\"\n */\n\nimport * as t from 'io-ts';\nimport { ThrowReporter } from 'io-ts/lib/ThrowReporter';\n\nimport * as manifests from 'ethpm/manifests/service';\nimport * as storage from 'ethpm/storage/service';\nimport * as registries from 'ethpm/registries/service';\nimport * as installer from 'ethpm/installer/service';\n\nexport type ConfigValue<S = any> =\n  string | (() => Connector<S>) | ({ default: () => Connector<S> });\n\nexport type HasManifests = { manifests: any };\nexport type HasStorage = { storage: any };\nexport type HasRegistries = { registries: any };\nexport type HasInstaller = { installer: any };\nexport type Complete = HasManifests & HasStorage & HasRegistries & HasInstaller;\n\n/**\n * Polymorphic type alias for any object that exposes keys for any or all\n * available services, i.e. `manifests`, `registries`, `storage`, `installer`\n */\nexport type Config =\n    HasManifests | HasStorage | HasRegistries | HasInstaller |\n    HasManifests & HasStorage |\n    HasManifests & HasRegistries |\n    HasManifests & HasInstaller |\n    HasStorage & HasRegistries |\n    HasStorage & HasInstaller |\n    HasRegistries & HasInstaller |\n    HasManifests & HasStorage & HasRegistries |\n    HasManifests & HasStorage & HasInstaller |\n    HasManifests & HasRegistries & HasInstaller |\n    HasStorage & HasRegistries & HasInstaller |\n    HasManifests & HasStorage & HasRegistries & HasInstaller\n\nexport type RawConfig<T extends Config> = {\n  [K in keyof T]: ConfigValue<Workspace<T>[K]>\n} & { [k: string]: ConfigValue };\n\nexport abstract class Connector<S> {\n  abstract optionsType: any;\n\n  abstract async init (...args: any[]): Promise<S>;\n\n  async connect(options: t.mixed): Promise<S> {\n    const validation = this.optionsType.decode(options);\n    if (!validation.isRight()) {\n      ThrowReporter.report(validation);\n    }\n\n    return this.init(validation.value);\n  }\n}\n\nexport type Workspace<T extends Config> = {\n  [K in keyof T]:\n    K extends 'manifests' ? manifests.Service :\n    K extends 'storage' ? storage.Service :\n    K extends 'registries' ? registries.Service :\n    K extends 'installer' ? installer.Service :\n    never\n}\n\nexport type Connectors<T extends Config> = {\n  [K in keyof Workspace<T>]: Connector<Workspace<T>[K]>\n} & { [k: string]: Connector<any> }\n"]}