All files / src/configgen tsContractConfigGen.ts

97.56% Statements 40/41
95% Branches 19/20
100% Functions 5/5
97.43% Lines 38/39

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66        1x       2x 2x   2x 2x   2x 2x 2x 2x   2x 2x   2x 2x   2x 1x   2x 2x 7x 2x       2x 2x   2x       7x 7x   7x 3x   7x 7x 7x 2x   7x 7x   7x 7x   7x 5x   7x 7x    
import { ContractSchema } from "../codegen/contractSchema";
import { Generator } from "../codegen/generator";
import { FieldConfig } from "../types";
 
export class TSContractConfigGen implements Generator {
    constructor() { }
 
    gen(schema: ContractSchema): string {
        let out = `import { ContractConfig, Feature, FunctionConfig } from '../../types';\n\n`;
        out += `const config: ContractConfig = {\n`;
 
        if (schema.scopeName) {
            out += `    "scopeName": "${schema.scopeName}",\n`;
        }
        out += `    "name": "${schema.name}",\n`;
        out += `    "symbol": "${schema.symbol}",\n`;
        if (schema.baseURI) {
            out += `    "baseURI": "${schema.baseURI}",\n`;
        }
        if (schema.schemaURI) {
            out += `    "schemaURI": "${schema.schemaURI}",\n`;
        }
        if (schema.imageURI) {
            out += `    "imageURI": "${schema.imageURI}",\n`;
        }
        if (schema.features && schema.features.length > 0) {
            out += `    "features": [${schema.features.map(f => `Feature.${f.toUpperCase()}`).join(', ')}],\n`;
        }
        if (schema.fields && schema.fields.length > 0) {
            out += `    "fields": [\n`;
            out += schema.fields.map(field => this.generateFieldConfig(field)).join(',\n');
            out += `\n    ]\n`;
        } else E{
            out += `    "fields": []\n`;
        }
        out += `}\n`;
        out += `export default config;\n`;
 
        return out;
    }
 
    private generateFieldConfig(field: FieldConfig): string {
        let fieldConfig = `        {\n`;
        fieldConfig += `            "id": ${field.id},\n`;
 
        if (field.permissionId !== undefined && field.permissionId !== 0) {
            fieldConfig += `            "permissionId": ${field.permissionId},\n`;
        }
        fieldConfig += `            "key": "${field.key}",\n`;
        fieldConfig += `            "type": "${field.type}",\n`;
        if (field.arrayLength !== undefined && field.arrayLength !== 1) {
            fieldConfig += `            "arrayLength": ${field.arrayLength},\n`;
        }
        if (field.visibility) {
            fieldConfig += `            "visibility": "${field.visibility}",\n`;
        }
        if (field.description) {
            fieldConfig += `            "description": "${field.description}",\n`;
        }
        if (field.functionConfig) {
            fieldConfig += `            "functionConfig": FunctionConfig.${field.functionConfig.toUpperCase()},\n`;
        }
        fieldConfig += `        }`;
        return fieldConfig;
    }
}