From 061c9bbbb0416ccb286b01d4a7675163c2759a8f Mon Sep 17 00:00:00 2001 From: Kyryl Riabov Date: Thu, 8 Aug 2024 13:32:02 +0300 Subject: [PATCH 1/5] Improved error messages --- src/core/CircuitArtifactGenerator.ts | 85 +++++++++++++++++++-------- test/CircuitArtifactGenerator.test.ts | 8 ++- 2 files changed, 65 insertions(+), 28 deletions(-) diff --git a/src/core/CircuitArtifactGenerator.ts b/src/core/CircuitArtifactGenerator.ts index ee4d96b..89bb835 100644 --- a/src/core/CircuitArtifactGenerator.ts +++ b/src/core/CircuitArtifactGenerator.ts @@ -109,11 +109,12 @@ export default class CircuitArtifactGenerator { /** * Returns the template arguments for the circuit. * + * @param circuitArtifact - The circuit artifact. * @param {string[]} args - The arguments of the template. * @param {any[]} names - The names of the arguments. * @returns {Record} The template arguments for the circuit. */ - private getTemplateArgs(args: string[], names: any[]): Record { + private getTemplateArgs(circuitArtifact: CircuitArtifact, args: string[], names: any[]): Record { if (args.length === 0) { return {}; } @@ -123,7 +124,7 @@ export default class CircuitArtifactGenerator { for (let i = 0; i < args.length; i++) { const argObj = (args[i] as any)["Number"]; - result[names[i]] = BigInt(this.resolveNumber(argObj)); + result[names[i]] = BigInt(this.resolveNumber(circuitArtifact, argObj)); } return result; @@ -132,9 +133,11 @@ export default class CircuitArtifactGenerator { /** * Resolves the variable from */ - private resolveVariable(variableObj: any) { + private resolveVariable(circuitArtifact: CircuitArtifact, variableObj: any) { if (!variableObj || !variableObj.name) { - throw new Error(`The argument ${variableObj} is not a variable`); + throw new Error( + `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is not a variable\n${JSON.stringify(variableObj)}`, + ); } return variableObj.name; @@ -143,19 +146,25 @@ export default class CircuitArtifactGenerator { /** * Resolves the number from the AST. */ - private resolveNumber(numberObj: any) { + private resolveNumber(circuitArtifact: CircuitArtifact, numberObj: any) { if (!numberObj || !numberObj.length || numberObj.length < 2) { - throw new Error(`The argument ${numberObj} is not a number`); + throw new Error( + `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is not a number\n${JSON.stringify(numberObj)}`, + ); } if (!numberObj[1] || !numberObj[1].length || numberObj[1].length < 2) { - throw new Error(`The argument ${numberObj} is of unexpected format`); + throw new Error( + `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is of unexpected format\n${JSON.stringify(numberObj)}`, + ); } const actualArg = numberObj[1][1]; if (!actualArg || !actualArg.length || numberObj[1].length < 1) { - throw new Error(`The argument ${numberObj} is of unexpected format`); + throw new Error( + `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is of unexpected format\n${JSON.stringify(numberObj)}`, + ); } return actualArg[0]; @@ -164,7 +173,7 @@ export default class CircuitArtifactGenerator { /** * Resolves the dimensions of the signal. */ - private resolveDimension(dimensions: number[]): number[] { + private resolveDimension(circuitArtifact: CircuitArtifact, dimensions: number[]): number[] { const result: number[] = []; for (const dimension of dimensions) { @@ -181,16 +190,18 @@ export default class CircuitArtifactGenerator { (numberObj !== undefined && variableObj !== undefined) || (numberObj === undefined && variableObj === undefined) ) { - throw new Error(`The dimension ${dimension} is of unexpected format`); + throw new Error( + `${this._getCircuitFullName(circuitArtifact)}: The dimension (see below) is of unexpected format\n${JSON.stringify(dimension)}`, + ); } if (numberObj) { - result.push(this.resolveNumber(numberObj)); + result.push(this.resolveNumber(circuitArtifact, numberObj)); continue; } - result.push(this.resolveVariable(variableObj)); + result.push(this.resolveVariable(circuitArtifact, variableObj)); } return result; @@ -265,11 +276,11 @@ export default class CircuitArtifactGenerator { /** * Finds the template for the circuit based on the circuit name. * + * @param {CircuitArtifact} circuitArtifact - The circuit artifact. * @param {CircomCompilerOutput[]} compilerOutputs - The compiler outputs of the circuit. - * @param {string} circuitName - The name of the circuit. * @returns {Template} The template for the circuit. */ - private _findTemplateForCircuit(compilerOutputs: CircomCompilerOutput[], circuitName: string): Template { + private _findTemplateForCircuit(circuitArtifact: CircuitArtifact, compilerOutputs: CircomCompilerOutput[]): Template { for (const compilerOutput of compilerOutputs) { if (!compilerOutput.definitions || compilerOutput.definitions.length < 1) { continue; @@ -280,13 +291,13 @@ export default class CircuitArtifactGenerator { continue; } - if (definition.Template.name === circuitName) { + if (definition.Template.name === circuitArtifact.circuitName) { return definition.Template; } } } - throw new Error(`The template for the circuit ${circuitName} could not be found.`); + throw new Error(`${this._getCircuitFullName(circuitArtifact)}: The template for the circuit could not be found.`); } /** @@ -304,26 +315,33 @@ export default class CircuitArtifactGenerator { const circuitArtifact: CircuitArtifact = this._getDefaultArtifact(pathToTheAST); - const template = this._findTemplateForCircuit(ast.circomCompilerOutput, circuitArtifact.circuitName); - const templateArgs = this.getTemplateArgs(ast.circomCompilerOutput[0].main_component![1].Call.args, template.args); + const template = this._findTemplateForCircuit(circuitArtifact, ast.circomCompilerOutput); + const templateArgs = this.getTemplateArgs( + circuitArtifact, + ast.circomCompilerOutput[0].main_component![1].Call.args, + template.args, + ); for (const statement of template.body.Block.stmts) { if ( !statement.InitializationBlock || - !this._validateInitializationBlock(ast.sourcePath, statement.InitializationBlock) || + !this._validateInitializationBlock(circuitArtifact, ast.sourcePath, statement.InitializationBlock) || statement.InitializationBlock.xtype.Signal[0] === SignalTypeNames.Intermediate ) { continue; } - const dimensions = this.resolveDimension(statement.InitializationBlock.initializations[0].Declaration.dimensions); + const dimensions = this.resolveDimension( + circuitArtifact, + statement.InitializationBlock.initializations[0].Declaration.dimensions, + ); const resolvedDimensions = dimensions.map((dimension: any) => { if (typeof dimension === "string") { const templateArg = templateArgs[dimension]; if (!templateArg) { throw new Error( - `The template argument ${dimension} is missing in the circuit ${circuitArtifact.circuitName}`, + `${this._getCircuitFullName(circuitArtifact)}: The template argument (see below) is missing in the circuit ${circuitArtifact.circuitName}\n${JSON.stringify(dimension)}`, ); } @@ -382,7 +400,7 @@ export default class CircuitArtifactGenerator { */ private _validateCircuitAST(ast: CircuitAST): void { if (!ast.circomCompilerOutput) { - throw new Error(`The circomCompilerOutput field is missing in the circuit AST`); + throw new Error(`The circomCompilerOutput field is missing in the circuit AST: ${ast.sourcePath}`); } if ( @@ -406,15 +424,22 @@ export default class CircuitArtifactGenerator { /** * Validates the initialization block in the circuit AST. * + * @param {CircuitArtifact} circuitArtifact - The default circuit artifact. * @param {string} astSourcePath - The source path of the AST. * @param {any} initializationBlock - The initialization block to be validated. * * @returns {boolean} Returns `true` if the initialization block is valid, `false` otherwise. * @throws {Error} If the initialization block is missing required fields. */ - private _validateInitializationBlock(astSourcePath: string, initializationBlock: any): boolean { + private _validateInitializationBlock( + circuitArtifact: CircuitArtifact, + astSourcePath: string, + initializationBlock: any, + ): boolean { if (!initializationBlock.xtype) { - throw new Error(`The initialization block xtype is missing in the circuit AST: ${astSourcePath}`); + throw new Error( + `${this._getCircuitFullName(circuitArtifact)}: The initialization block xtype is missing in the circuit AST: ${astSourcePath}`, + ); } if ( @@ -424,7 +449,7 @@ export default class CircuitArtifactGenerator { !initializationBlock.initializations[0].Declaration.name ) { throw new Error( - `The initializations field of initialization block is missing or incomplete in the circuit AST: ${astSourcePath}`, + `${this._getCircuitFullName(circuitArtifact)}: The initializations field of initialization block is missing or incomplete in the circuit AST: ${astSourcePath}`, ); } @@ -434,4 +459,14 @@ export default class CircuitArtifactGenerator { return true; } + + /** + * Returns the full name of the circuit. + * + * @param {CircuitArtifact} artifact - The circuit artifact. + * @returns {string} The full name of the circuit. + */ + private _getCircuitFullName(artifact: CircuitArtifact): string { + return `${artifact.sourceName}:${artifact.circuitName}`; + } } diff --git a/test/CircuitArtifactGenerator.test.ts b/test/CircuitArtifactGenerator.test.ts index c9ff7fc..6045ec7 100644 --- a/test/CircuitArtifactGenerator.test.ts +++ b/test/CircuitArtifactGenerator.test.ts @@ -67,7 +67,7 @@ describe("Circuit Artifact Generation", function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidInitializationBlockName.json"); expect(result.error).to.be.equal( - "The initializations field of initialization block is missing or incomplete in the circuit AST: test/fixture/InvalidInitializationBlockName.circom", + "test/fixture/InvalidInitializationBlockName.circom:Multiplier2: The initializations field of initialization block is missing or incomplete in the circuit AST: test/fixture/InvalidInitializationBlockName.circom", ); }); @@ -86,14 +86,16 @@ describe("Circuit Artifact Generation", function () { it("should return an error if the template block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidTemplateBlock.json"); - expect(result.error).to.be.equal("The template for the circuit Multiplier2 could not be found."); + expect(result.error).to.be.equal( + "test/fixture/InvalidTemplateBlock.circom:Multiplier2: The template for the circuit could not be found.", + ); }); it("should return an error if the xtype of the initialization block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidXTypeField.json"); expect(result.error).to.be.equal( - "The initialization block xtype is missing in the circuit AST: test/fixture/InvalidXTypeField.circom", + "test/fixture/InvalidXTypeField.circom:Multiplier2: The initialization block xtype is missing in the circuit AST: test/fixture/InvalidXTypeField.circom", ); }); }); From 7d902ef14431e2faa066797a12d4e2c209583b19 Mon Sep 17 00:00:00 2001 From: Kyryl Riabov Date: Thu, 8 Aug 2024 13:44:00 +0300 Subject: [PATCH 2/5] Updated version --- CHANGELOG.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4230c11..194d442 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [v0.2.7] + +* Improved error messages during the artifact extraction process + ## [v0.2.4-v0.2.6] * Added ability to recover after error during artifact extraction diff --git a/package-lock.json b/package-lock.json index dd4e961..31126a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@solarity/zktype", - "version": "0.2.6", + "version": "0.2.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@solarity/zktype", - "version": "0.2.6", + "version": "0.2.7", "license": "MIT", "dependencies": { "ejs": "3.1.10", diff --git a/package.json b/package.json index caf45a9..c1eeb8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@solarity/zktype", - "version": "0.2.6", + "version": "0.2.7", "description": "Unleash TypeScript bindings for Circom circuits", "main": "dist/index.js", "types": "dist/index.d.ts", From a63cbf948af33b8b8577d8920cadcc68a8244503 Mon Sep 17 00:00:00 2001 From: Kyryl Riabov Date: Thu, 8 Aug 2024 17:53:39 +0300 Subject: [PATCH 3/5] Updated errors. Used ParseError obj --- src/core/CircuitArtifactGenerator.ts | 54 ++++++++++++++++++--------- src/errors/ParseError.ts | 19 ++++++++++ src/errors/index.ts | 1 + src/index.ts | 2 + test/CircuitArtifactGenerator.test.ts | 10 ++--- 5 files changed, 61 insertions(+), 25 deletions(-) create mode 100644 src/errors/ParseError.ts create mode 100644 src/errors/index.ts diff --git a/src/core/CircuitArtifactGenerator.ts b/src/core/CircuitArtifactGenerator.ts index 89bb835..b79c898 100644 --- a/src/core/CircuitArtifactGenerator.ts +++ b/src/core/CircuitArtifactGenerator.ts @@ -16,6 +16,8 @@ import { ArtifactGeneratorConfig, } from "../types"; +import { ASTParserError } from "../errors"; + /** * `CircuitArtifactGenerator` is responsible for generating circuit artifacts based on the AST files. * @@ -135,8 +137,10 @@ export default class CircuitArtifactGenerator { */ private resolveVariable(circuitArtifact: CircuitArtifact, variableObj: any) { if (!variableObj || !variableObj.name) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is not a variable\n${JSON.stringify(variableObj)}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The argument is not a variable`, + variableObj, ); } @@ -148,22 +152,24 @@ export default class CircuitArtifactGenerator { */ private resolveNumber(circuitArtifact: CircuitArtifact, numberObj: any) { if (!numberObj || !numberObj.length || numberObj.length < 2) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is not a number\n${JSON.stringify(numberObj)}`, - ); + throw new ASTParserError(this._getCircuitFullName(circuitArtifact), `The argument is not a number`, numberObj); } if (!numberObj[1] || !numberObj[1].length || numberObj[1].length < 2) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is of unexpected format\n${JSON.stringify(numberObj)}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The argument is of unexpected format`, + numberObj, ); } const actualArg = numberObj[1][1]; if (!actualArg || !actualArg.length || numberObj[1].length < 1) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The argument (see below) is of unexpected format\n${JSON.stringify(numberObj)}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The argument is of unexpected format`, + actualArg, ); } @@ -190,8 +196,10 @@ export default class CircuitArtifactGenerator { (numberObj !== undefined && variableObj !== undefined) || (numberObj === undefined && variableObj === undefined) ) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The dimension (see below) is of unexpected format\n${JSON.stringify(dimension)}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The dimension is of unexpected format`, + dimension, ); } @@ -297,7 +305,11 @@ export default class CircuitArtifactGenerator { } } - throw new Error(`${this._getCircuitFullName(circuitArtifact)}: The template for the circuit could not be found.`); + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The template for the circuit could not be found.`, + undefined, + ); } /** @@ -340,8 +352,10 @@ export default class CircuitArtifactGenerator { const templateArg = templateArgs[dimension]; if (!templateArg) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The template argument (see below) is missing in the circuit ${circuitArtifact.circuitName}\n${JSON.stringify(dimension)}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The template argument is missing in the circuit ${circuitArtifact.circuitName}`, + dimension, ); } @@ -437,8 +451,10 @@ export default class CircuitArtifactGenerator { initializationBlock: any, ): boolean { if (!initializationBlock.xtype) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The initialization block xtype is missing in the circuit AST: ${astSourcePath}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The initialization block xtype is missing in the circuit AST`, + initializationBlock, ); } @@ -448,8 +464,10 @@ export default class CircuitArtifactGenerator { !initializationBlock.initializations[0].Declaration || !initializationBlock.initializations[0].Declaration.name ) { - throw new Error( - `${this._getCircuitFullName(circuitArtifact)}: The initializations field of initialization block is missing or incomplete in the circuit AST: ${astSourcePath}`, + throw new ASTParserError( + this._getCircuitFullName(circuitArtifact), + `The initializations field of initialization block is missing or incomplete in the circuit AST: ${astSourcePath}`, + initializationBlock, ); } diff --git a/src/errors/ParseError.ts b/src/errors/ParseError.ts new file mode 100644 index 0000000..e7430b4 --- /dev/null +++ b/src/errors/ParseError.ts @@ -0,0 +1,19 @@ +export interface ASTParserErrorDetails { + circuitFullNames: string; + message: string; + context: any; +} + +export class ASTParserError extends Error { + public error: ASTParserErrorDetails; + + constructor(fullName: string, message: string, context: any) { + super(); + this.message = message; + this.error = { + circuitFullNames: fullName, + message, + context, + }; + } +} diff --git a/src/errors/index.ts b/src/errors/index.ts new file mode 100644 index 0000000..593f01e --- /dev/null +++ b/src/errors/index.ts @@ -0,0 +1 @@ +export * from "./ParseError"; diff --git a/src/index.ts b/src/index.ts index 21ca96e..838740b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,3 +2,5 @@ export * from "./types"; export * from "./constants"; export * from "./core/CircuitTypesGenerator"; + +export * from "./errors"; diff --git a/test/CircuitArtifactGenerator.test.ts b/test/CircuitArtifactGenerator.test.ts index 6045ec7..2ce93f2 100644 --- a/test/CircuitArtifactGenerator.test.ts +++ b/test/CircuitArtifactGenerator.test.ts @@ -67,7 +67,7 @@ describe("Circuit Artifact Generation", function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidInitializationBlockName.json"); expect(result.error).to.be.equal( - "test/fixture/InvalidInitializationBlockName.circom:Multiplier2: The initializations field of initialization block is missing or incomplete in the circuit AST: test/fixture/InvalidInitializationBlockName.circom", + "The initializations field of initialization block is missing or incomplete in the circuit AST: test/fixture/InvalidInitializationBlockName.circom", ); }); @@ -86,16 +86,12 @@ describe("Circuit Artifact Generation", function () { it("should return an error if the template block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidTemplateBlock.json"); - expect(result.error).to.be.equal( - "test/fixture/InvalidTemplateBlock.circom:Multiplier2: The template for the circuit could not be found.", - ); + expect(result.error).to.be.equal("The template for the circuit could not be found."); }); it("should return an error if the xtype of the initialization block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidXTypeField.json"); - expect(result.error).to.be.equal( - "test/fixture/InvalidXTypeField.circom:Multiplier2: The initialization block xtype is missing in the circuit AST: test/fixture/InvalidXTypeField.circom", - ); + expect(result.error).to.be.equal("The initialization block xtype is missing in the circuit AST"); }); }); From 26e15e719d1066a7cf6ccf5f2b5505f336e86531 Mon Sep 17 00:00:00 2001 From: Kyryl Riabov Date: Thu, 8 Aug 2024 18:41:15 +0300 Subject: [PATCH 4/5] Use ErrorObj as a return type --- src/core/CircuitArtifactGenerator.ts | 9 +++++---- src/core/CircuitTypesGenerator.ts | 3 ++- src/errors/common.ts | 3 +++ src/types/common.ts | 4 +++- test/CircuitArtifactGenerator.test.ts | 6 +++--- 5 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 src/errors/common.ts diff --git a/src/core/CircuitArtifactGenerator.ts b/src/core/CircuitArtifactGenerator.ts index b79c898..373e7c4 100644 --- a/src/core/CircuitArtifactGenerator.ts +++ b/src/core/CircuitArtifactGenerator.ts @@ -17,6 +17,7 @@ import { } from "../types"; import { ASTParserError } from "../errors"; +import { ErrorObj } from "../errors/common"; /** * `CircuitArtifactGenerator` is responsible for generating circuit artifacts based on the AST files. @@ -53,10 +54,10 @@ export default class CircuitArtifactGenerator { /** * Generates circuit artifacts based on the ASTs. */ - public async generateCircuitArtifacts(): Promise { + public async generateCircuitArtifacts(): Promise { const astFilePaths = this._circuitArtifactGeneratorConfig.circuitsASTPaths; - const errors: string[] = []; + const errors: ErrorObj[] = []; for (const astFilePath of astFilePaths) { const circuitArtifact = await this.getCircuitArtifact(astFilePath); @@ -100,10 +101,10 @@ export default class CircuitArtifactGenerator { data: await this._extractArtifact(pathToTheAST), error: null, }; - } catch (error: any) { + } catch (error: any | ASTParserError) { return { data: this._getDefaultArtifact(pathToTheAST, CircuitArtifactGenerator.DEFAULT_CIRCUIT_FORMAT), - error: error!.message, + error: error, }; } } diff --git a/src/core/CircuitTypesGenerator.ts b/src/core/CircuitTypesGenerator.ts index 501aee7..42a1f1e 100644 --- a/src/core/CircuitTypesGenerator.ts +++ b/src/core/CircuitTypesGenerator.ts @@ -8,6 +8,7 @@ import CircuitArtifactGenerator from "./CircuitArtifactGenerator"; import { normalizeName } from "../utils"; import { CircuitArtifact, ArtifactWithPath } from "../types"; +import { ErrorObj } from "../errors/common"; /** * `CircuitTypesGenerator` is need for generating TypeScript bindings based on circuit artifacts. @@ -55,7 +56,7 @@ export class CircuitTypesGenerator extends ZkitTSGenerator { * * @returns {Promise} A promise that resolves when all types have been generated. */ - public async generateTypes(): Promise { + public async generateTypes(): Promise { const errorsWhenGenArtifacts = await this._artifactsGenerator.generateCircuitArtifacts(); const circuitArtifacts = this._fetchCircuitArtifacts(); diff --git a/src/errors/common.ts b/src/errors/common.ts new file mode 100644 index 0000000..30ba12f --- /dev/null +++ b/src/errors/common.ts @@ -0,0 +1,3 @@ +import { ASTParserError } from "./ParseError"; + +export type ErrorObj = { message: string } | ASTParserError | null; diff --git a/src/types/common.ts b/src/types/common.ts index 51f1a22..060d74c 100644 --- a/src/types/common.ts +++ b/src/types/common.ts @@ -1,4 +1,6 @@ +import { ASTParserError } from "../errors"; + export interface Result { data: T; - error: string | null; + error: { message: string } | ASTParserError | null; } diff --git a/test/CircuitArtifactGenerator.test.ts b/test/CircuitArtifactGenerator.test.ts index 2ce93f2..07d0741 100644 --- a/test/CircuitArtifactGenerator.test.ts +++ b/test/CircuitArtifactGenerator.test.ts @@ -66,7 +66,7 @@ describe("Circuit Artifact Generation", function () { it("should return an error if the name in the initialization block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidInitializationBlockName.json"); - expect(result.error).to.be.equal( + expect(result.error!.message).to.be.equal( "The initializations field of initialization block is missing or incomplete in the circuit AST: test/fixture/InvalidInitializationBlockName.circom", ); }); @@ -86,12 +86,12 @@ describe("Circuit Artifact Generation", function () { it("should return an error if the template block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidTemplateBlock.json"); - expect(result.error).to.be.equal("The template for the circuit could not be found."); + expect(result.error!.message).to.be.equal("The template for the circuit could not be found."); }); it("should return an error if the xtype of the initialization block is missing", async function () { const result = await artifactGenerator.getCircuitArtifact("test/mocks/InvalidXTypeField.json"); - expect(result.error).to.be.equal("The initialization block xtype is missing in the circuit AST"); + expect(result.error!.message).to.be.equal("The initialization block xtype is missing in the circuit AST"); }); }); From 270c02c9f161513e1751adc3ae8d4b80bcdffdd6 Mon Sep 17 00:00:00 2001 From: Kyryl Riabov Date: Thu, 8 Aug 2024 18:52:21 +0300 Subject: [PATCH 5/5] Updated exports --- src/errors/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/errors/index.ts b/src/errors/index.ts index 593f01e..6b504c2 100644 --- a/src/errors/index.ts +++ b/src/errors/index.ts @@ -1 +1,2 @@ +export * from "./common"; export * from "./ParseError";