Skip to content

Commit 9391f76

Browse files
authored
fix: structs declaration template (#690)
1 parent 450bbcd commit 9391f76

File tree

4 files changed

+85
-10
lines changed

4 files changed

+85
-10
lines changed

.changeset/violet-planes-chew.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@fuel-ts/abi-typegen": patch
3+
---
4+
5+
Fixing DTS declaration template for Structs

packages/abi-typegen/src/templates/dts.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { contractPaths } from '../../test/fixtures';
2-
import expectedTemplate from '../../test/fixtures/templates/transpiled/dts.hbs';
2+
import expectedDtsFullTemplate from '../../test/fixtures/templates/transpiled/dts.hbs';
33
import { mockVersions } from '../../test/utils/mockVersions';
44
import { compileSwayToJson } from '../../test/utils/sway/compileSwayToJson';
55
import { Abi } from '../Abi';
@@ -12,7 +12,7 @@ describe('templates/dts', () => {
1212
const { restore } = mockVersions();
1313

1414
// executing
15-
const contractPath = contractPaths.minimal;
15+
const contractPath = contractPaths.full;
1616
const { rawContents } = compileSwayToJson({ contractPath });
1717

1818
const abi = new Abi({
@@ -26,11 +26,11 @@ describe('templates/dts', () => {
2626
// validating
2727
restore();
2828

29-
expect(rendered).toEqual(expectedTemplate);
29+
expect(rendered).toEqual(expectedDtsFullTemplate);
3030
});
3131

3232
test('should render dts template w/ custom common types', () => {
33-
const contractPath = contractPaths.full;
33+
const contractPath = contractPaths.vectorSimple;
3434
const { rawContents } = compileSwayToJson({ contractPath });
3535
const abi = new Abi({
3636
filepath: './my-contract-abi.json',

packages/abi-typegen/src/templates/hbs/dts.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ export type {{structName}}Output = Enum<{ {{outputValues}} }>;
2727

2828

2929
{{#each structs}}
30-
export type {{structName}}Input{{typeAnnotations}} = {{inputValues}};
30+
export type {{structName}}Input{{typeAnnotations}} = { {{inputValues}} };
3131
{{#if recycleRef}}
3232
export type {{structName}}Output{{typeAnnotations}} = {{structName}}Input{{typeAnnotations}};
3333
{{else}}
34-
export type {{structName}}Output{{typeAnnotations}} = {{outputValues}};
34+
export type {{structName}}Output{{typeAnnotations}} = { {{outputValues}} };
3535
{{/if}}
3636
{{/each}}
3737

packages/abi-typegen/test/fixtures/templates/dts.hbs

Lines changed: 74 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,89 @@ import type {
2020
BN,
2121
} from 'fuels';
2222

23+
import type { Option, Enum, Vec } from "./common";
24+
25+
export type MyEnumInput = Enum<{ Checked: [], Pending: [] }>;
26+
export type MyEnumOutput = MyEnumInput;
27+
28+
export type MyStructInput = { x: BigNumberish, y: BigNumberish, state: MyEnumInput };
29+
export type MyStructOutput = { x: number, y: number, state: MyEnumOutput };
30+
export type StructWithMultiOptionInput = { multiple: [Option<BigNumberish>, Option<BigNumberish>, Option<BigNumberish>, Option<BigNumberish>, Option<BigNumberish>] };
31+
export type StructWithMultiOptionOutput = { multiple: [Option<number>, Option<number>, Option<number>, Option<number>, Option<number>] };
32+
2333
interface MyContractAbiInterface extends Interface {
2434
functions: {
25-
main: FunctionFragment;
35+
types_array: FunctionFragment;
36+
types_b256: FunctionFragment;
37+
types_bool: FunctionFragment;
38+
types_enum: FunctionFragment;
39+
types_option: FunctionFragment;
40+
types_option_geo: FunctionFragment;
41+
types_str: FunctionFragment;
42+
types_struct: FunctionFragment;
43+
types_tuple: FunctionFragment;
44+
types_u16: FunctionFragment;
45+
types_u32: FunctionFragment;
46+
types_u64: FunctionFragment;
47+
types_u8: FunctionFragment;
48+
types_vector_geo: FunctionFragment;
49+
types_vector_option: FunctionFragment;
50+
types_vector_u8: FunctionFragment;
2651
};
2752

28-
encodeFunctionData(functionFragment: 'main', values: [string, string]): Uint8Array;
53+
encodeFunctionData(functionFragment: 'types_array', values: [[BigNumberish, BigNumberish, BigNumberish]]): Uint8Array;
54+
encodeFunctionData(functionFragment: 'types_b256', values: [string]): Uint8Array;
55+
encodeFunctionData(functionFragment: 'types_bool', values: [boolean]): Uint8Array;
56+
encodeFunctionData(functionFragment: 'types_enum', values: [MyEnumInput]): Uint8Array;
57+
encodeFunctionData(functionFragment: 'types_option', values: [Option<BigNumberish>]): Uint8Array;
58+
encodeFunctionData(functionFragment: 'types_option_geo', values: [Option<MyStructInput>]): Uint8Array;
59+
encodeFunctionData(functionFragment: 'types_str', values: [string]): Uint8Array;
60+
encodeFunctionData(functionFragment: 'types_struct', values: [MyStructInput]): Uint8Array;
61+
encodeFunctionData(functionFragment: 'types_tuple', values: [[BigNumberish, BigNumberish, BigNumberish]]): Uint8Array;
62+
encodeFunctionData(functionFragment: 'types_u16', values: [BigNumberish]): Uint8Array;
63+
encodeFunctionData(functionFragment: 'types_u32', values: [BigNumberish]): Uint8Array;
64+
encodeFunctionData(functionFragment: 'types_u64', values: [BigNumberish]): Uint8Array;
65+
encodeFunctionData(functionFragment: 'types_u8', values: [BigNumberish]): Uint8Array;
66+
encodeFunctionData(functionFragment: 'types_vector_geo', values: [Vec<MyStructInput>]): Uint8Array;
67+
encodeFunctionData(functionFragment: 'types_vector_option', values: [Vec<StructWithMultiOptionInput>]): Uint8Array;
68+
encodeFunctionData(functionFragment: 'types_vector_u8', values: [Vec<BigNumberish>]): Uint8Array;
2969

30-
decodeFunctionData(functionFragment: 'main', data: BytesLike): DecodedValue;
70+
decodeFunctionData(functionFragment: 'types_array', data: BytesLike): DecodedValue;
71+
decodeFunctionData(functionFragment: 'types_b256', data: BytesLike): DecodedValue;
72+
decodeFunctionData(functionFragment: 'types_bool', data: BytesLike): DecodedValue;
73+
decodeFunctionData(functionFragment: 'types_enum', data: BytesLike): DecodedValue;
74+
decodeFunctionData(functionFragment: 'types_option', data: BytesLike): DecodedValue;
75+
decodeFunctionData(functionFragment: 'types_option_geo', data: BytesLike): DecodedValue;
76+
decodeFunctionData(functionFragment: 'types_str', data: BytesLike): DecodedValue;
77+
decodeFunctionData(functionFragment: 'types_struct', data: BytesLike): DecodedValue;
78+
decodeFunctionData(functionFragment: 'types_tuple', data: BytesLike): DecodedValue;
79+
decodeFunctionData(functionFragment: 'types_u16', data: BytesLike): DecodedValue;
80+
decodeFunctionData(functionFragment: 'types_u32', data: BytesLike): DecodedValue;
81+
decodeFunctionData(functionFragment: 'types_u64', data: BytesLike): DecodedValue;
82+
decodeFunctionData(functionFragment: 'types_u8', data: BytesLike): DecodedValue;
83+
decodeFunctionData(functionFragment: 'types_vector_geo', data: BytesLike): DecodedValue;
84+
decodeFunctionData(functionFragment: 'types_vector_option', data: BytesLike): DecodedValue;
85+
decodeFunctionData(functionFragment: 'types_vector_u8', data: BytesLike): DecodedValue;
3186
}
3287

3388
export class MyContractAbi extends Contract {
3489
interface: MyContractAbiInterface;
3590
functions: {
36-
main: InvokeFunction<[x: string, y: string], boolean>;
91+
types_array: InvokeFunction<[x: [BigNumberish, BigNumberish, BigNumberish]], [number, number, number]>;
92+
types_b256: InvokeFunction<[x: string], string>;
93+
types_bool: InvokeFunction<[x: boolean], boolean>;
94+
types_enum: InvokeFunction<[x: MyEnumInput], MyEnumOutput>;
95+
types_option: InvokeFunction<[x: Option<BigNumberish>], Option<number>>;
96+
types_option_geo: InvokeFunction<[x: Option<MyStructInput>], Option<MyStructOutput>>;
97+
types_str: InvokeFunction<[x: string], string>;
98+
types_struct: InvokeFunction<[x: MyStructInput], MyStructOutput>;
99+
types_tuple: InvokeFunction<[x: [BigNumberish, BigNumberish, BigNumberish]], [number, number, number]>;
100+
types_u16: InvokeFunction<[x: BigNumberish], number>;
101+
types_u32: InvokeFunction<[x: BigNumberish], number>;
102+
types_u64: InvokeFunction<[x: BigNumberish], BN>;
103+
types_u8: InvokeFunction<[x: BigNumberish], number>;
104+
types_vector_geo: InvokeFunction<[x: Vec<MyStructInput>], Vec<MyStructOutput>>;
105+
types_vector_option: InvokeFunction<[x: Vec<StructWithMultiOptionInput>], Vec<StructWithMultiOptionOutput>>;
106+
types_vector_u8: InvokeFunction<[x: Vec<BigNumberish>], Vec<number>>;
37107
};
38108
}

0 commit comments

Comments
 (0)