@newos/cli
Version:
Command-line interface for the NewOS
116 lines • 4.8 kB
JavaScript
"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