aboutsummaryrefslogtreecommitdiffstats
path: root/packages/sol-cov/src/collect_contract_data.ts
blob: 1d8bc7178b110a4d0ed436aad1ea56dfd502a30f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import * as fs from 'fs';
import * as glob from 'glob';
import * as _ from 'lodash';
import * as path from 'path';

import { ContractData } from './types';

export const collectContractsData = (artifactsPath: string, sourcesPath: string, networkId: number) => {
    const artifactsGlob = `${artifactsPath}/**/*.json`;
    const artifactFileNames = glob.sync(artifactsGlob, { absolute: true });
    const contractsDataIfExists: Array<ContractData | {}> = _.map(artifactFileNames, artifactFileName => {
        const artifact = JSON.parse(fs.readFileSync(artifactFileName).toString());
        const sources = artifact.networks[networkId].sources;
        const contractName = artifact.contract_name;
        // We don't compute coverage for dependencies
        const sourceCodes = _.map(sources, (source: string) => fs.readFileSync(source).toString());
        if (_.isUndefined(artifact.networks[networkId])) {
            throw new Error(`No ${contractName} artifacts found for networkId ${networkId}`);
        }
        const contractData = {
            sourceCodes,
            sources,
            sourceMap: artifact.networks[networkId].source_map,
            sourceMapRuntime: artifact.networks[networkId].source_map_runtime,
            runtimeBytecode: artifact.networks[networkId].runtime_bytecode,
            bytecode: artifact.networks[networkId].bytecode,
        };
        return contractData;
    });
    const contractsData = _.filter(contractsDataIfExists, contractData => !_.isEmpty(contractData)) as ContractData[];
    return contractsData;
};