UNPKG

@newos/cli

Version:
116 lines 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProxyAdminProjectDeployer = exports.AppProjectDeployer = exports.PackageProjectDeployer = void 0; const lodash_1 = require("lodash"); const upgrades_1 = require("@newos/upgrades"); class BaseProjectDeployer { constructor(controller, requestedVersion) { this.controller = controller; this.projectFile = controller.projectFile; this.networkFile = controller.networkFile; this.txParams = controller.txParams; this.requestedVersion = requestedVersion; } } class BasePackageProjectDeployer extends BaseProjectDeployer { get packageAddress() { return this.controller.packageAddress; } _tryRegisterPartialDeploy({ thepackage, directory }) { if (thepackage) this._registerPackage(thepackage); if (directory) this._registerVersion(this.requestedVersion, directory); } _registerPackage({ address }) { this.networkFile.package = { address }; } _registerVersion(version, { address }) { this.networkFile.provider = { address }; this.networkFile.version = version; } } class PackageProjectDeployer extends BasePackageProjectDeployer { async fetchOrDeploy() { try { const packageAddress = this.packageAddress; this.project = await upgrades_1.PackageProject.fetchOrDeploy(this.requestedVersion, this.txParams, { packageAddress }); this._registerPackage(await this.project.getProjectPackage()); this._registerVersion(this.requestedVersion, await this.project.getCurrentDirectory()); return this.project; } catch (deployError) { this._tryRegisterPartialDeploy(deployError); if (!this.project) throw deployError; } } } exports.PackageProjectDeployer = PackageProjectDeployer; class AppProjectDeployer extends BasePackageProjectDeployer { async fetchOrDeploy() { return this._run((existingAddresses) => upgrades_1.AppProject.fetchOrDeploy(this.projectFile.name, this.requestedVersion, this.txParams, existingAddresses)); } async fromProxyAdminProject(proxyAdminProject) { return this._run((existingAddresses) => upgrades_1.AppProject.fromProxyAdminProject(proxyAdminProject, this.requestedVersion, existingAddresses)); } get appAddress() { return this.controller.appAddress; } get proxyAdminAddress() { return this.networkFile.proxyAdminAddress; } get proxyFactoryAddress() { return this.networkFile.proxyFactoryAddress; } async _run(createProjectFn) { try { const { appAddress, packageAddress, proxyAdminAddress, proxyFactoryAddress } = this; this.project = await createProjectFn({ appAddress, packageAddress, proxyAdminAddress, proxyFactoryAddress, }); await this._registerDeploy(); return this.project; } catch (deployError) { this._tryRegisterPartialDeploy(deployError); if (!this.project) throw deployError; } } _tryRegisterPartialDeploy({ thepackage, app, directory }) { super._tryRegisterPartialDeploy({ thepackage, directory }); if (app) this._registerApp(app); } async _registerDeploy() { this._registerApp(this.project.getApp()); this._registerPackage(await this.project.getProjectPackage()); this._registerVersion(this.requestedVersion, await this.project.getCurrentDirectory()); } _registerApp({ address }) { this.networkFile.app = { address }; } } exports.AppProjectDeployer = AppProjectDeployer; class ProxyAdminProjectDeployer extends BaseProjectDeployer { async fetchOrDeploy() { this.project = await upgrades_1.ProxyAdminProject.fetch(this.projectFile.name, this.txParams, this.networkFile.proxyAdminAddress, this.networkFile.proxyFactoryAddress); this.networkFile.version = this.requestedVersion; lodash_1.forEach(this.networkFile.contracts, (contractInfo, contractName) => { this.project.registerImplementation(contractName, { address: contractInfo.address, bytecodeHash: contractInfo.bodyBytecodeHash, }); }); lodash_1.forEach(this.networkFile.dependencies, (dependencyInfo, dependencyName) => { this.project.setDependency(dependencyName, dependencyInfo.package, dependencyInfo.version); }); return this.project; } } exports.ProxyAdminProjectDeployer = ProxyAdminProjectDeployer; //# sourceMappingURL=ProjectDeployer.js.map