From e60b67048b0593a6f4aeb9ae0d02ef8220c42c49 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Fri, 13 Sep 2024 12:01:14 +0100 Subject: [PATCH 1/5] chore: added test to provide issue --- packages/fuel-gauge/src/coverage-contract.test.ts | 11 +++++++++++ .../fuel-gauge/test/fixtures/forc-projects/Forc.toml | 1 + .../forc-projects/coverage-contract/Forc.toml | 1 + .../forc-projects/coverage-contract/src/main.sw | 6 ++++++ .../forc-projects/data-structure-library/Forc.toml | 6 ++++++ .../forc-projects/data-structure-library/src/main.sw | 6 ++++++ 6 files changed, 31 insertions(+) create mode 100644 packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/Forc.toml create mode 100644 packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/src/main.sw diff --git a/packages/fuel-gauge/src/coverage-contract.test.ts b/packages/fuel-gauge/src/coverage-contract.test.ts index 4d74f8c1eb6..30adfbe28f0 100644 --- a/packages/fuel-gauge/src/coverage-contract.test.ts +++ b/packages/fuel-gauge/src/coverage-contract.test.ts @@ -839,4 +839,15 @@ describe('Coverage Contract', { timeout: 15_000 }, () => { expect(results).toStrictEqual([1, 2, SmallEnumInput.Empty, INPUT_B, INPUT_A]); }); + + it('should handle an enum from a library', async () => { + using contractInstance = await setupContract(); + + const { waitForResult } = await contractInstance.functions + .echo_enum_namespaced({ GameOver: 1 }) + .call(); + + const { value } = await waitForResult(); + expect(value).toStrictEqual({ GameOver: 1 }); + }); }); diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/Forc.toml b/packages/fuel-gauge/test/fixtures/forc-projects/Forc.toml index 5b7cc0762b3..1520dd7b675 100644 --- a/packages/fuel-gauge/test/fixtures/forc-projects/Forc.toml +++ b/packages/fuel-gauge/test/fixtures/forc-projects/Forc.toml @@ -14,6 +14,7 @@ members = [ "complex-script", "configurable-contract", "coverage-contract", + "data-structure-library", "generic-types-contract", "large-contract", "multi-token-contract", diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/Forc.toml b/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/Forc.toml index a1d3960ca67..dcfc6abb2f3 100644 --- a/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/Forc.toml +++ b/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/Forc.toml @@ -4,3 +4,4 @@ license = "Apache-2.0" name = "coverage-contract" [dependencies] +data-structure-library = { path = "../data-structure-library" } diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw index 70b2e8a722d..615eb0f0547 100644 --- a/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw +++ b/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw @@ -9,6 +9,7 @@ use std::logging::log; use std::option::Option; use std::storage::*; use std::vec::Vec; +use data_structure_library::GameState; pub struct U8Struct { i: u8, @@ -126,6 +127,7 @@ abi CoverageContract { inputD: b256, ) -> Vec; fn types_result(x: Result) -> Result; + fn echo_enum_namespaced(value: GameState) -> GameState; } pub fn vec_from(vals: [u32; 3]) -> Vec { @@ -463,4 +465,8 @@ impl CoverageContract for Contract { Err(MyContractError::DivisionByZero) => Err(__to_str_array("DivisError")), } } + + fn echo_enum_namespaced(value: GameState) -> GameState { + value + } } diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/Forc.toml b/packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/Forc.toml new file mode 100644 index 00000000000..7eab826bdda --- /dev/null +++ b/packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/Forc.toml @@ -0,0 +1,6 @@ +[project] +authors = ["Fuel Labs "] +license = "Apache-2.0" +name = "data-structure-library" + +[dependencies] diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/src/main.sw new file mode 100644 index 00000000000..c289d6fb823 --- /dev/null +++ b/packages/fuel-gauge/test/fixtures/forc-projects/data-structure-library/src/main.sw @@ -0,0 +1,6 @@ +library; + +pub enum GameState { + Playing: u8, + GameOver: u8, +} From fd55471c908603f4f5477573854f5acc94c2887e Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Fri, 13 Sep 2024 12:15:12 +0100 Subject: [PATCH 2/5] chore: fixed RegEx --- packages/abi-coder/src/utils/constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/abi-coder/src/utils/constants.ts b/packages/abi-coder/src/utils/constants.ts index 62dab906484..f2c4935ec68 100644 --- a/packages/abi-coder/src/utils/constants.ts +++ b/packages/abi-coder/src/utils/constants.ts @@ -19,9 +19,9 @@ export const STR_SLICE_CODER_TYPE = 'str'; export const VOID_TYPE = '()'; export const optionRegEx: RegExp = /^enum (std::option::)?Option$/m; -export const stringRegEx = /str\[(?[0-9]+)\]/; -export const arrayRegEx = /\[(?[\w\s\\[\]]+);\s*(?[0-9]+)\]/; -export const structRegEx = /struct.+/; +export const stringRegEx = /^str\[(?[0-9]+)\]/; +export const arrayRegEx = /^\[(?[\w\s\\[\]]+);\s*(?[0-9]+)\]/; +export const structRegEx = /^struct.+/; export const enumRegEx = /^enum.+$/; export const tupleRegEx = /^\((?.*)\)$/; export const genericRegEx = /^generic.+$/; From 9c299307af1c414f9434b635daaf90e16067c1b3 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Fri, 13 Sep 2024 12:15:43 +0100 Subject: [PATCH 3/5] fix: incorrect coder matching --- .changeset/many-beans-end.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/many-beans-end.md diff --git a/.changeset/many-beans-end.md b/.changeset/many-beans-end.md new file mode 100644 index 00000000000..868185aea3a --- /dev/null +++ b/.changeset/many-beans-end.md @@ -0,0 +1,5 @@ +--- +"@fuel-ts/abi-coder": patch +--- + +fix: incorrect coder matching From ebda4c03b736b44bf23496a29770d4043979d76f Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Fri, 13 Sep 2024 12:17:45 +0100 Subject: [PATCH 4/5] chore: release to NPM --- .github/workflows/pr-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 6eeca1f3f04..593d7fce145 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: "Release PR to npm" runs-on: ubuntu-latest # comment out if:false to enable release PR to npm - if: false + # if: false permissions: write-all steps: - name: Checkout From 965ccc4d79e166b76bba3fc62cb9fdd869643f28 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Fri, 13 Sep 2024 12:23:33 +0100 Subject: [PATCH 5/5] chore: removed NPM deploy --- .github/workflows/pr-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 593d7fce145..6eeca1f3f04 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: "Release PR to npm" runs-on: ubuntu-latest # comment out if:false to enable release PR to npm - # if: false + if: false permissions: write-all steps: - name: Checkout