@patchworkdev/pdk
Version:
Patchwork Development Kit
69 lines (68 loc) • 3.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.localDevUp = localDevUp;
const lockFile_1 = __importDefault(require("../../services/lockFile"));
const contract_processor_1 = require("./services/contract-processor");
const deployment_manager_1 = require("./services/deployment-manager");
const docker_1 = require("./services/docker");
const env_1 = require("./services/env");
const fees_1 = require("./services/fees");
const generator_1 = require("./services/generator");
const tasks_1 = require("./services/tasks");
async function initializeConfig(configPath, config = {}) {
const lockFileManager = new lockFile_1.default(configPath);
const network = lockFileManager.getCurrentNetwork();
return {
rpcUrl: config.rpcUrl || 'http://localhost:8545',
privateKey: config.privateKey || '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
owner: config.owner || '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
patchworkProtocol: config.patchworkProtocol || '0x00000000001616E65bb9FdA42dFBb7155406549b',
network: config.network || network, // Add network from lockFile if not provided
};
}
async function deployIfNeeded(deploymentManager, contractProcessor, configPath, deployConfig, network) {
const bytecodeInfo = await contractProcessor.processContracts(configPath, deployConfig, false);
const comparison = await deploymentManager.compareWithPreviousDeployment(network, bytecodeInfo);
if (comparison.changes.length > 0) {
deploymentManager.logBytecodeChanges(comparison, network);
}
if (comparison.needsDeployment) {
if (!deployConfig.rpcUrl) {
throw new Error('RPC URL is required for deployment');
}
console.info(`Deploying contracts to ${network}...`);
const deployedContracts = await contractProcessor.processContracts(configPath, deployConfig, true);
await deploymentManager.logDeployments(deployedContracts, network, deployConfig.rpcUrl);
return deployedContracts;
}
return deploymentManager.getExistingDeployments(bytecodeInfo, network);
}
async function localDevUp(configPath, config = {}, genService) {
console.info('Running local development environment...');
const deployConfig = await initializeConfig(configPath, config);
const lockFileManager = new lockFile_1.default(configPath);
const dockerService = new docker_1.DockerService(configPath);
const deploymentManager = new deployment_manager_1.DeploymentManager(lockFileManager);
const contractProcessor = new contract_processor_1.ContractProcessor();
const envGenerator = new env_1.EnvGenerator(configPath);
const generatorService = new generator_1.GeneratorService(configPath, lockFileManager);
const feeService = new fees_1.FeeService(configPath, deployConfig);
const taskService = new tasks_1.TaskService(configPath);
await dockerService.startServices();
await generatorService.processGenerators();
const network = lockFileManager.getCurrentNetwork();
const deployedContracts = await deployIfNeeded(deploymentManager, contractProcessor, configPath, deployConfig, network);
// Configure fees for all deployed contracts
await feeService.configureFeesForDeployment(deployedContracts);
await taskService.runTasks({ deployConfig, deployedContracts });
await genService.runGenerator('ponder');
await genService.runGenerator('react');
await envGenerator.generateEnvironments();
await dockerService.restartPonderContainer();
const status = await dockerService.getContainerStatus();
console.table(status);
return deployedContracts;
}