trufflesuite/truffle

View on GitHub
packages/db/src/project/loadMigrate/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * @category Internal processor
 * @packageDocumentation
 */
import { logger } from "@truffle/db/logger";
const debug = logger("db:project:loadMigrate");

import type { ContractObject } from "@truffle/contract-schema/spec";
import type { IdObject } from "@truffle/db/resources";
import type { Process } from "@truffle/db/process";

import * as Batch from "./batch";
export { Batch };

import * as GetContracts from "./contracts";
import * as AddContractInstances from "./contractInstances";
export { GetContracts, AddContractInstances };

export type Artifact = {
  networks?: {
    [networkId: string]: {
      db?: {
        network: IdObject<"networks">;
        contractInstance: IdObject<"contractInstances">;
      };
    };
  };
};

export function* process(options: {
  network: {
    networkId: string;
  };
  artifacts: (ContractObject & {
    db: {
      contract: IdObject<"contracts">;
      callBytecode: IdObject<"bytecodes">;
      createBytecode: IdObject<"bytecodes">;
    };
    networks?: {
      [networkId: string]: {
        db?: {
          network: IdObject<"networks">;
        };
      };
    };
  })[];
}): Process<{
  artifacts: Artifact[];
}> {
  const withContracts = yield* GetContracts.process(options);

  const { artifacts } = yield* AddContractInstances.process(withContracts);

  return {
    artifacts: artifacts.map(artifact => ({
      ...artifact,
      networks: artifact.networks
    }))
  };
}