Przeglądaj źródła

Fix CI (#330)

* Add set -eux to e2e scripts

* Fix TS error

* Lint fix
Loris Leiva 11 miesięcy temu
rodzic
commit
159c18856d

+ 11 - 11
README.md

@@ -31,8 +31,8 @@ Because everything is designed as a `Node`, we can transform the IDL, aggregate
 
 There are various ways to extract information from your Solana programs in order to obtain a Codama IDL.
 
--   **Using Codama macros**. This is not yet available but you will soon have access to a set of Rust macros that help attach IDL information directly within your Rust code. These macros enable Codama IDLs to be generated whenever you build your programs.
--   **From Anchor IDLs**. If you are using [Anchor programs](https://github.com/coral-xyz/anchor) or [Shank macros](https://github.com/metaplex-foundation/shank), then you can get an Anchor IDL from them. You can then use the `@codama/nodes-from-anchor` package to convert that IDL into a Codama IDL as shown in the code snippet below. Note that the Anchor IDL might not offer all the information that Codama can hold and therefore, you may want to transform your Codama IDL to provide additional information. You can learn more about this in the next section.
+- **Using Codama macros**. This is not yet available but you will soon have access to a set of Rust macros that help attach IDL information directly within your Rust code. These macros enable Codama IDLs to be generated whenever you build your programs.
+- **From Anchor IDLs**. If you are using [Anchor programs](https://github.com/coral-xyz/anchor) or [Shank macros](https://github.com/metaplex-foundation/shank), then you can get an Anchor IDL from them. You can then use the `@codama/nodes-from-anchor` package to convert that IDL into a Codama IDL as shown in the code snippet below. Note that the Anchor IDL might not offer all the information that Codama can hold and therefore, you may want to transform your Codama IDL to provide additional information. You can learn more about this in the next section.
 
     ```ts
     import { createFromRoot } from 'codama';
@@ -42,7 +42,7 @@ There are various ways to extract information from your Solana programs in order
     const codama = createFromRoot(rootNodeFromAnchor(anchorIdl));
     ```
 
--   **By hand**. If your Solana program cannot be updated to use Codama macros and you don’t have an Anchor IDL, you may design your Codama IDL by hand. We may provide tools such as a Codama Playground to help with that in the future.
+- **By hand**. If your Solana program cannot be updated to use Codama macros and you don’t have an Anchor IDL, you may design your Codama IDL by hand. We may provide tools such as a Codama Playground to help with that in the future.
 
 ## Transforming Codama
 
@@ -61,12 +61,12 @@ Now that you have the perfect Codama IDL for your Solana program, you can benefi
 
 _Note that some features such as rendering CLIs are not yet available. However, because the Codama IDL is designed as a tree of nodes, these features are only a visitor away from being ready. Feel free to reach out if you’d like to contribute to this Codama ecosystem._
 
--   **Rendering client code**. Want people to start interacting with your Solana program? You can use special visitors that go through your Codama IDL and generate client code that you can then publish for your end-users. Currently, we have the following renderers available:
+- **Rendering client code**. Want people to start interacting with your Solana program? You can use special visitors that go through your Codama IDL and generate client code that you can then publish for your end-users. Currently, we have the following renderers available:
 
-    -   `@codama/renderers-js`: Renders a JavaScript client compatible with the soon-to-be-released 2.0 line of [`@solana/web3.js`](https://github.com/solana-labs/solana-web3.js).
-    -   `@codama/renderers-js-umi`: Renders a JavaScript client compatible with Metaplex’s [Umi](https://github.com/metaplex-foundation/umi) framework.
-    -   `@codama/renderers-rust`: Renders a Rust client that removes the need for publishing the program crate and offers a better developer experience.
-    -   _And more to come._
+    - `@codama/renderers-js`: Renders a JavaScript client compatible with the soon-to-be-released 2.0 line of [`@solana/web3.js`](https://github.com/solana-labs/solana-web3.js).
+    - `@codama/renderers-js-umi`: Renders a JavaScript client compatible with Metaplex’s [Umi](https://github.com/metaplex-foundation/umi) framework.
+    - `@codama/renderers-rust`: Renders a Rust client that removes the need for publishing the program crate and offers a better developer experience.
+    - _And more to come._
 
     Here’s an example of how to generate JavaScript and Rust client code for your program.
 
@@ -77,6 +77,6 @@ _Note that some features such as rendering CLIs are not yet available. However,
     codama.accept(renderRustVisitor('clients/rust/src/generated', { ... }));
     ```
 
--   **Registering your Codama IDL on-chain** (_Coming soon_). Perhaps the biggest benefit of having a Codama IDL from your program is that you can share it on-chain with the rest of the ecosystem. This means explorers may now use this information to provide a better experience for users of your programs. Additionally, anyone can now grab your Codama IDL, select the portion they are interested in and benefit from the same ecosystem of Codama visitors to iterate over it. For instance, an app could decide to grab the IDLs of all programs they depend on, filter out the accounts and instructions they don’t need and generate a bespoke client for their app that only contains the functions the app needs.
--   **Rendering CLIs** (_Not yet available_). Whilst not available yet, we can imagine a set of CLI commands that can be generated from our Codama IDL (much like our clients) so that end-users can fetch decoded accounts and send instructions directly from their terminal.
--   **Rendering documentation** (_Not yet available_). Similarly to CLIs, we may easily generate documentation in various formats from the information held by our Codama IDL.
+- **Registering your Codama IDL on-chain** (_Coming soon_). Perhaps the biggest benefit of having a Codama IDL from your program is that you can share it on-chain with the rest of the ecosystem. This means explorers may now use this information to provide a better experience for users of your programs. Additionally, anyone can now grab your Codama IDL, select the portion they are interested in and benefit from the same ecosystem of Codama visitors to iterate over it. For instance, an app could decide to grab the IDLs of all programs they depend on, filter out the accounts and instructions they don’t need and generate a bespoke client for their app that only contains the functions the app needs.
+- **Rendering CLIs** (_Not yet available_). Whilst not available yet, we can imagine a set of CLI commands that can be generated from our Codama IDL (much like our clients) so that end-users can fetch decoded accounts and send instructions directly from their terminal.
+- **Rendering documentation** (_Not yet available_). Similarly to CLIs, we may easily generate documentation in various formats from the information held by our Codama IDL.

+ 4 - 4
packages/errors/README.md

@@ -75,9 +75,9 @@ To add a new error in Codama, follow these steps:
 
 ### Removing an error message
 
--   Don't remove errors.
--   Don't change the meaning of an error message.
--   Don't change or reorder error codes.
--   Don't change or remove members of an error's context.
+- Don't remove errors.
+- Don't change the meaning of an error message.
+- Don't change or reorder error codes.
+- Don't change or remove members of an error's context.
 
 When an older client throws an error, we want to make sure that they can always decode the error. If you make any of the changes above, old clients will, by definition, not have received your changes. This could make the errors that they throw impossible to decode going forward.

+ 9 - 9
packages/library/README.md

@@ -19,12 +19,12 @@ pnpm install codama
 
 This package includes the following packages. Note that some of them also re-export other packages.
 
--   [`@codama/errors`](../errors)
--   [`@codama/nodes`](../nodes)
-    -   [`@codama/node-types`](../node-types)
--   [`@codama/validators`](../validators)
--   [`@codama/visitors`](../visitors)
-    -   [`@codama/visitor-core`](../visitor-core)
+- [`@codama/errors`](../errors)
+- [`@codama/nodes`](../nodes)
+    - [`@codama/node-types`](../node-types)
+- [`@codama/validators`](../validators)
+- [`@codama/visitors`](../visitors)
+    - [`@codama/visitor-core`](../visitor-core)
 
 ## The Codama helper
 
@@ -70,9 +70,9 @@ codama.update(
 
 Other helper functions include:
 
--   `clone()`: Creates a new instance of the `Codama` interface with a deep copy of the wrapped `RootNode`.
--   `getJson()`: Returns the JSON representation of the Codama IDL.
--   `getRoot()`: Returns the wrapped `RootNode`.
+- `clone()`: Creates a new instance of the `Codama` interface with a deep copy of the wrapped `RootNode`.
+- `getJson()`: Returns the JSON representation of the Codama IDL.
+- `getRoot()`: Returns the wrapped `RootNode`.
 
 ```ts
 const clonedCodama = codama.clone();

+ 89 - 89
packages/nodes/README.md

@@ -28,92 +28,92 @@ The Codama IDL is composed of various nodes that describe different aspects of a
 
 Below are all of the available nodes and their documentation. Also note that you can refer to any node using the [`Node`](./docs/README.md) helper type.
 
--   [`AccountNode`](./docs/AccountNode.md)
--   [`DefinedTypeNode`](./docs/DefinedTypeNode.md)
--   [`ErrorNode`](./docs/ErrorNode.md)
--   [`InstructionAccountNode`](./docs/InstructionAccountNode.md)
--   [`InstructionArgumentNode`](./docs/InstructionArgumentNode.md)
--   [`InstructionByteDeltaNode`](./docs/InstructionByteDeltaNode.md)
--   [`InstructionNode`](./docs/InstructionNode.md)
--   [`InstructionRemainingAccountsNode`](./docs/InstructionRemainingAccountsNode.md)
--   [`PdaNode`](./docs/PdaNode.md)
--   [`ProgramNode`](./docs/ProgramNode.md)
--   [`RootNode`](./docs/RootNode.md)
--   [`ContextualValueNode`](./docs/contextualValueNodes/README.md) (abstract)
-    -   [`AccountBumpValueNode`](./docs/contextualValueNodes/AccountBumpValueNode.md)
-    -   [`AccountValueNode`](./docs/contextualValueNodes/AccountValueNode.md)
-    -   [`ArgumentValueNode`](./docs/contextualValueNodes/ArgumentValueNode.md)
-    -   [`ConditionalValueNode`](./docs/contextualValueNodes/ConditionalValueNode.md)
-    -   [`IdentityValueNode`](./docs/contextualValueNodes/IdentityValueNode.md)
-    -   [`PayerValueNode`](./docs/contextualValueNodes/PayerValueNode.md)
-    -   [`PdaSeedValueNode`](./docs/contextualValueNodes/PdaSeedValueNode.md)
-    -   [`PdaValueNode`](./docs/contextualValueNodes/PdaValueNode.md)
-    -   [`ProgramIdValueNode`](./docs/contextualValueNodes/ProgramIdValueNode.md)
-    -   [`ResolverValueNode`](./docs/contextualValueNodes/ResolverValueNodemds)
--   [`CountNode`](./docs/countNodes/README.md) (abstract)
-    -   [`FixedCountNode`](./docs/countNodes/FixedCountNode.md)
-    -   [`PrefixedCountNode`](./docs/countNodes/PrefixedCountNode.md)
-    -   [`RemainderCountNode`](./docs/countNodes/RemainderCountNodemds)
--   [`DiscriminatorNode`](./docs/discriminatorNodes/README.md) (abstract)
-    -   [`ConstantDiscriminatorNode`](./docs/discriminatorNodes/ConstantDiscriminatorNode.md)
-    -   [`FieldDiscriminatorNode`](./docs/discriminatorNodes/FieldDiscriminatorNode.md)
-    -   [`SizeDiscriminatorNode`](./docs/discriminatorNodes/SizeDiscriminatorNodemds)
--   [`LinkNode`](./docs/linkNodes/README.md) (abstract)
-    -   [`AccountLinkNode`](./docs/linkNodes/AccountLinkNode.md)
-    -   [`DefinedTypeLinkNode`](./docs/linkNodes/DefinedTypeLinkNode.md)
-    -   [`InstructionAccountLinkNode`](./docs/linkNodes/InstructionAccountLinkNode.md)
-    -   [`InstructionArgumentLinkNode`](./docs/linkNodes/InstructionArgumentLinkNode.md)
-    -   [`InstructionLinkNode`](./docs/linkNodes/InstructionLinkNode.md)
-    -   [`PdaLinkNode`](./docs/linkNodes/PdaLinkNode.md)
-    -   [`ProgramLinkNode`](./docs/linkNodes/ProgramLinkNode.md)
--   [`PdaSeedNode`](./docs/pdaSeedNodes/README.md) (abstract)
-    -   [`ConstantPdaSeedNode`](./docs/pdaSeedNodes/ConstantPdaSeedNode.md)
-    -   [`VariablePdaSeedNode`](./docs/pdaSeedNodes/VariablePdaSeedNode.md)
--   [`TypeNode`](./docs/typeNodes/README.md) (abstract)
-    -   [`AmountTypeNode`](./docs/typeNodes/AmountTypeNode.md)
-    -   [`ArrayTypeNode`](./docs/typeNodes/ArrayTypeNode.md)
-    -   [`BooleanTypeNode`](./docs/typeNodes/BooleanTypeNode.md)
-    -   [`BytesTypeNode`](./docs/typeNodes/BytesTypeNode.md)
-    -   [`DateTimeTypeNode`](./docs/typeNodes/DateTimeTypeNode.md)
-    -   [`EnumEmptyVariantTypeNode`](./docs/typeNodes/EnumEmptyVariantTypeNode.md)
-    -   [`EnumStructVariantTypeNode`](./docs/typeNodes/EnumStructVariantTypeNode.md)
-    -   [`EnumTupleVariantTypeNode`](./docs/typeNodes/EnumTupleVariantTypeNode.md)
-    -   [`EnumTypeNode`](./docs/typeNodes/EnumTypeNode.md)
-    -   [`EnumVariantTypeNode`](./docs/typeNodes/EnumVariantTypeNode.md) (abstract)
-    -   [`FixedSizeTypeNode`](./docs/typeNodes/FixedSizeTypeNode.md)
-    -   [`HiddenPrefixTypeNode`](./docs/typeNodes/HiddenPrefixTypeNode.md)
-    -   [`HiddenSuffixTypeNode`](./docs/typeNodes/HiddenSuffixTypeNode.md)
-    -   [`MapTypeNode`](./docs/typeNodes/MapTypeNode.md)
-    -   [`NestedTypeNode`](./docs/typeNodes/NestedTypeNode.md) (helper)
-    -   [`NumberTypeNode`](./docs/typeNodes/NumberTypeNode.md)
-    -   [`OptionTypeNode`](./docs/typeNodes/OptionTypeNode.md)
-    -   [`PostOffsetTypeNode`](./docs/typeNodes/PostOffsetTypeNode.md)
-    -   [`PreOffsetTypeNode`](./docs/typeNodes/PreOffsetTypeNode.md)
-    -   [`PublicKeyTypeNode`](./docs/typeNodes/PublicKeyTypeNode.md)
-    -   [`RemainderOptionTypeNode`](./docs/typeNodes/RemainderOptionTypeNode.md)
-    -   [`SentinelTypeNode`](./docs/typeNodes/SentinelTypeNode.md)
-    -   [`SetTypeNode`](./docs/typeNodes/SetTypeNode.md)
-    -   [`SizePrefixTypeNode`](./docs/typeNodes/SizePrefixTypeNode.md)
-    -   [`SolAmountTypeNode`](./docs/typeNodes/SolAmountTypeNode.md)
-    -   [`StringTypeNode`](./docs/typeNodes/StringTypeNode.md)
-    -   [`StructFieldTypeNode`](./docs/typeNodes/StructFieldTypeNode.md)
-    -   [`StructTypeNode`](./docs/typeNodes/StructTypeNode.md)
-    -   [`TupleTypeNode`](./docs/typeNodes/TupleTypeNode.md)
-    -   [`ZeroableOptionTypeNod`](./docs/typeNodes/ZeroableOptionTypeNod.md)
--   [`ValueNode`](./docs/valueNodes/README.md) (abstract)
-    -   [`ArrayValueNode`](./docs/valueNodes/ArrayValueNode.md)
-    -   [`BooleanValueNode`](./docs/valueNodes/BooleanValueNode.md)
-    -   [`BytesValueNode`](./docs/valueNodes/BytesValueNode.md)
-    -   [`ConstantValueNode`](./docs/valueNodes/ConstantValueNode.md)
-    -   [`EnumValueNode`](./docs/valueNodes/EnumValueNode.md)
-    -   [`MapEntryValueNode`](./docs/valueNodes/MapEntryValueNode.md)
-    -   [`MapValueNode`](./docs/valueNodes/MapValueNode.md)
-    -   [`NoneValueNode`](./docs/valueNodes/NoneValueNode.md)
-    -   [`NumberValueNode`](./docs/valueNodes/NumberValueNode.md)
-    -   [`PublicKeyValueNode`](./docs/valueNodes/PublicKeyValueNode.md)
-    -   [`SetValueNode`](./docs/valueNodes/SetValueNode.md)
-    -   [`SomeValueNode`](./docs/valueNodes/SomeValueNode.md)
-    -   [`StringValueNode`](./docs/valueNodes/StringValueNode.md)
-    -   [`StructFieldValueNode`](./docs/valueNodes/StructFieldValueNode.md)
-    -   [`StructValueNode`](./docs/valueNodes/StructValueNode.md)
-    -   [`TupleValueNode`](./docs/valueNodes/TupleValueNode.md)
+- [`AccountNode`](./docs/AccountNode.md)
+- [`DefinedTypeNode`](./docs/DefinedTypeNode.md)
+- [`ErrorNode`](./docs/ErrorNode.md)
+- [`InstructionAccountNode`](./docs/InstructionAccountNode.md)
+- [`InstructionArgumentNode`](./docs/InstructionArgumentNode.md)
+- [`InstructionByteDeltaNode`](./docs/InstructionByteDeltaNode.md)
+- [`InstructionNode`](./docs/InstructionNode.md)
+- [`InstructionRemainingAccountsNode`](./docs/InstructionRemainingAccountsNode.md)
+- [`PdaNode`](./docs/PdaNode.md)
+- [`ProgramNode`](./docs/ProgramNode.md)
+- [`RootNode`](./docs/RootNode.md)
+- [`ContextualValueNode`](./docs/contextualValueNodes/README.md) (abstract)
+    - [`AccountBumpValueNode`](./docs/contextualValueNodes/AccountBumpValueNode.md)
+    - [`AccountValueNode`](./docs/contextualValueNodes/AccountValueNode.md)
+    - [`ArgumentValueNode`](./docs/contextualValueNodes/ArgumentValueNode.md)
+    - [`ConditionalValueNode`](./docs/contextualValueNodes/ConditionalValueNode.md)
+    - [`IdentityValueNode`](./docs/contextualValueNodes/IdentityValueNode.md)
+    - [`PayerValueNode`](./docs/contextualValueNodes/PayerValueNode.md)
+    - [`PdaSeedValueNode`](./docs/contextualValueNodes/PdaSeedValueNode.md)
+    - [`PdaValueNode`](./docs/contextualValueNodes/PdaValueNode.md)
+    - [`ProgramIdValueNode`](./docs/contextualValueNodes/ProgramIdValueNode.md)
+    - [`ResolverValueNode`](./docs/contextualValueNodes/ResolverValueNodemds)
+- [`CountNode`](./docs/countNodes/README.md) (abstract)
+    - [`FixedCountNode`](./docs/countNodes/FixedCountNode.md)
+    - [`PrefixedCountNode`](./docs/countNodes/PrefixedCountNode.md)
+    - [`RemainderCountNode`](./docs/countNodes/RemainderCountNodemds)
+- [`DiscriminatorNode`](./docs/discriminatorNodes/README.md) (abstract)
+    - [`ConstantDiscriminatorNode`](./docs/discriminatorNodes/ConstantDiscriminatorNode.md)
+    - [`FieldDiscriminatorNode`](./docs/discriminatorNodes/FieldDiscriminatorNode.md)
+    - [`SizeDiscriminatorNode`](./docs/discriminatorNodes/SizeDiscriminatorNodemds)
+- [`LinkNode`](./docs/linkNodes/README.md) (abstract)
+    - [`AccountLinkNode`](./docs/linkNodes/AccountLinkNode.md)
+    - [`DefinedTypeLinkNode`](./docs/linkNodes/DefinedTypeLinkNode.md)
+    - [`InstructionAccountLinkNode`](./docs/linkNodes/InstructionAccountLinkNode.md)
+    - [`InstructionArgumentLinkNode`](./docs/linkNodes/InstructionArgumentLinkNode.md)
+    - [`InstructionLinkNode`](./docs/linkNodes/InstructionLinkNode.md)
+    - [`PdaLinkNode`](./docs/linkNodes/PdaLinkNode.md)
+    - [`ProgramLinkNode`](./docs/linkNodes/ProgramLinkNode.md)
+- [`PdaSeedNode`](./docs/pdaSeedNodes/README.md) (abstract)
+    - [`ConstantPdaSeedNode`](./docs/pdaSeedNodes/ConstantPdaSeedNode.md)
+    - [`VariablePdaSeedNode`](./docs/pdaSeedNodes/VariablePdaSeedNode.md)
+- [`TypeNode`](./docs/typeNodes/README.md) (abstract)
+    - [`AmountTypeNode`](./docs/typeNodes/AmountTypeNode.md)
+    - [`ArrayTypeNode`](./docs/typeNodes/ArrayTypeNode.md)
+    - [`BooleanTypeNode`](./docs/typeNodes/BooleanTypeNode.md)
+    - [`BytesTypeNode`](./docs/typeNodes/BytesTypeNode.md)
+    - [`DateTimeTypeNode`](./docs/typeNodes/DateTimeTypeNode.md)
+    - [`EnumEmptyVariantTypeNode`](./docs/typeNodes/EnumEmptyVariantTypeNode.md)
+    - [`EnumStructVariantTypeNode`](./docs/typeNodes/EnumStructVariantTypeNode.md)
+    - [`EnumTupleVariantTypeNode`](./docs/typeNodes/EnumTupleVariantTypeNode.md)
+    - [`EnumTypeNode`](./docs/typeNodes/EnumTypeNode.md)
+    - [`EnumVariantTypeNode`](./docs/typeNodes/EnumVariantTypeNode.md) (abstract)
+    - [`FixedSizeTypeNode`](./docs/typeNodes/FixedSizeTypeNode.md)
+    - [`HiddenPrefixTypeNode`](./docs/typeNodes/HiddenPrefixTypeNode.md)
+    - [`HiddenSuffixTypeNode`](./docs/typeNodes/HiddenSuffixTypeNode.md)
+    - [`MapTypeNode`](./docs/typeNodes/MapTypeNode.md)
+    - [`NestedTypeNode`](./docs/typeNodes/NestedTypeNode.md) (helper)
+    - [`NumberTypeNode`](./docs/typeNodes/NumberTypeNode.md)
+    - [`OptionTypeNode`](./docs/typeNodes/OptionTypeNode.md)
+    - [`PostOffsetTypeNode`](./docs/typeNodes/PostOffsetTypeNode.md)
+    - [`PreOffsetTypeNode`](./docs/typeNodes/PreOffsetTypeNode.md)
+    - [`PublicKeyTypeNode`](./docs/typeNodes/PublicKeyTypeNode.md)
+    - [`RemainderOptionTypeNode`](./docs/typeNodes/RemainderOptionTypeNode.md)
+    - [`SentinelTypeNode`](./docs/typeNodes/SentinelTypeNode.md)
+    - [`SetTypeNode`](./docs/typeNodes/SetTypeNode.md)
+    - [`SizePrefixTypeNode`](./docs/typeNodes/SizePrefixTypeNode.md)
+    - [`SolAmountTypeNode`](./docs/typeNodes/SolAmountTypeNode.md)
+    - [`StringTypeNode`](./docs/typeNodes/StringTypeNode.md)
+    - [`StructFieldTypeNode`](./docs/typeNodes/StructFieldTypeNode.md)
+    - [`StructTypeNode`](./docs/typeNodes/StructTypeNode.md)
+    - [`TupleTypeNode`](./docs/typeNodes/TupleTypeNode.md)
+    - [`ZeroableOptionTypeNod`](./docs/typeNodes/ZeroableOptionTypeNod.md)
+- [`ValueNode`](./docs/valueNodes/README.md) (abstract)
+    - [`ArrayValueNode`](./docs/valueNodes/ArrayValueNode.md)
+    - [`BooleanValueNode`](./docs/valueNodes/BooleanValueNode.md)
+    - [`BytesValueNode`](./docs/valueNodes/BytesValueNode.md)
+    - [`ConstantValueNode`](./docs/valueNodes/ConstantValueNode.md)
+    - [`EnumValueNode`](./docs/valueNodes/EnumValueNode.md)
+    - [`MapEntryValueNode`](./docs/valueNodes/MapEntryValueNode.md)
+    - [`MapValueNode`](./docs/valueNodes/MapValueNode.md)
+    - [`NoneValueNode`](./docs/valueNodes/NoneValueNode.md)
+    - [`NumberValueNode`](./docs/valueNodes/NumberValueNode.md)
+    - [`PublicKeyValueNode`](./docs/valueNodes/PublicKeyValueNode.md)
+    - [`SetValueNode`](./docs/valueNodes/SetValueNode.md)
+    - [`SomeValueNode`](./docs/valueNodes/SomeValueNode.md)
+    - [`StringValueNode`](./docs/valueNodes/StringValueNode.md)
+    - [`StructFieldValueNode`](./docs/valueNodes/StructFieldValueNode.md)
+    - [`StructValueNode`](./docs/valueNodes/StructValueNode.md)
+    - [`TupleValueNode`](./docs/valueNodes/TupleValueNode.md)

+ 3 - 3
packages/nodes/docs/contextualValueNodes/InstructionInputValueNode.md

@@ -2,6 +2,6 @@
 
 The `InstructionInputValueNode` type helper represents all values that can be used as a default value for an instruction account or an instruction argument. Note that `InstructionInputValueNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`ContextualValueNode`](./README.md) (abstract)
--   [`ProgramLinkNode`](../linkNodes/ProgramLinkNode.md)
--   [`ValueNode`](../valueNodes/README.md) (abstract)
+- [`ContextualValueNode`](./README.md) (abstract)
+- [`ProgramLinkNode`](../linkNodes/ProgramLinkNode.md)
+- [`ValueNode`](../valueNodes/README.md) (abstract)

+ 9 - 9
packages/nodes/docs/contextualValueNodes/README.md

@@ -2,12 +2,12 @@
 
 The `ContextualValueNode` type helper represents all the available contextual value nodes. Note that `ContextualValueNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`AccountBumpValueNode`](./AccountBumpValueNode.md)
--   [`AccountValueNode`](./AccountValueNode.md)
--   [`ArgumentValueNode`](./ArgumentValueNode.md)
--   [`ConditionalValueNode`](./ConditionalValueNode.md)
--   [`IdentityValueNode`](./IdentityValueNode.md)
--   [`PayerValueNode`](./PayerValueNode.md)
--   [`PdaValueNode`](./PdaValueNode.md)
--   [`ProgramIdValueNode`](./ProgramIdValueNode.md)
--   [`ResolverValueNode`](./ResolverValueNode.md)
+- [`AccountBumpValueNode`](./AccountBumpValueNode.md)
+- [`AccountValueNode`](./AccountValueNode.md)
+- [`ArgumentValueNode`](./ArgumentValueNode.md)
+- [`ConditionalValueNode`](./ConditionalValueNode.md)
+- [`IdentityValueNode`](./IdentityValueNode.md)
+- [`PayerValueNode`](./PayerValueNode.md)
+- [`PdaValueNode`](./PdaValueNode.md)
+- [`ProgramIdValueNode`](./ProgramIdValueNode.md)
+- [`ResolverValueNode`](./ResolverValueNode.md)

+ 3 - 3
packages/nodes/docs/countNodes/README.md

@@ -2,6 +2,6 @@
 
 The `CountNode` type helper represents all available strategies that determine the size of a collection. Note that `CountNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`FixedCountNode`](./FixedCountNode.md)
--   [`PrefixedCountNode`](./PrefixedCountNode.md)
--   [`RemainderCountNode`](./RemainderCountNode.md)
+- [`FixedCountNode`](./FixedCountNode.md)
+- [`PrefixedCountNode`](./PrefixedCountNode.md)
+- [`RemainderCountNode`](./RemainderCountNode.md)

+ 3 - 3
packages/nodes/docs/discriminatorNodes/README.md

@@ -2,6 +2,6 @@
 
 The `DiscriminatorNode` type helper represents all available strategies that help distinguish blocks of data — such as accounts and instructions. Note that `DiscriminatorNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`ConstantDiscriminatorNode`](./ConstantDiscriminatorNode.md)
--   [`FieldDiscriminatorNode`](./FieldDiscriminatorNode.md)
--   [`SizeDiscriminatorNode`](./SizeDiscriminatorNode.md)
+- [`ConstantDiscriminatorNode`](./ConstantDiscriminatorNode.md)
+- [`FieldDiscriminatorNode`](./FieldDiscriminatorNode.md)
+- [`SizeDiscriminatorNode`](./SizeDiscriminatorNode.md)

+ 7 - 7
packages/nodes/docs/linkNodes/README.md

@@ -2,10 +2,10 @@
 
 The `LinkNode` type helper represents all nodes that link to other nodes. Note that `LinkNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`AccountLinkNode`](./AccountLinkNode.md)
--   [`DefinedTypeLinkNode`](./DefinedTypeLinkNode.md)
--   [`InstructionAccountLinkNode`](./InstructionAccountLinkNode.md)
--   [`InstructionArgumentLinkNode`](./InstructionArgumentLinkNode.md)
--   [`InstructionLinkNode`](./InstructionLinkNode.md)
--   [`PdaLinkNode`](./PdaLinkNode.md)
--   [`ProgramLinkNode`](./ProgramLinkNode.md)
+- [`AccountLinkNode`](./AccountLinkNode.md)
+- [`DefinedTypeLinkNode`](./DefinedTypeLinkNode.md)
+- [`InstructionAccountLinkNode`](./InstructionAccountLinkNode.md)
+- [`InstructionArgumentLinkNode`](./InstructionArgumentLinkNode.md)
+- [`InstructionLinkNode`](./InstructionLinkNode.md)
+- [`PdaLinkNode`](./PdaLinkNode.md)
+- [`ProgramLinkNode`](./ProgramLinkNode.md)

+ 2 - 2
packages/nodes/docs/pdaSeedNodes/README.md

@@ -2,5 +2,5 @@
 
 The `PdaSeedNode` type helper represents all ways to define a PDA seed. Note that `PdaSeedNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`ConstantPdaSeedNode`](./ConstantPdaSeedNode.md)
--   [`VariablePdaSeedNode`](./VariablePdaSeedNode.md)
+- [`ConstantPdaSeedNode`](./ConstantPdaSeedNode.md)
+- [`VariablePdaSeedNode`](./VariablePdaSeedNode.md)

+ 3 - 3
packages/nodes/docs/typeNodes/EnumVariantTypeNode.md

@@ -2,6 +2,6 @@
 
 The `EnumVariantTypeNode` type helper represents any of the available enum variant types. Note that it cannot be used directly as a node. Instead you may use one of the following types:
 
--   [`EnumEmptyVariantTypeNode`](./EnumEmptyVariantTypeNode.md)
--   [`EnumStructVariantTypeNode`](./EnumStructVariantTypeNode.md)
--   [`EnumTupleVariantTypeNode`](./EnumTupleVariantTypeNode.md)
+- [`EnumEmptyVariantTypeNode`](./EnumEmptyVariantTypeNode.md)
+- [`EnumStructVariantTypeNode`](./EnumStructVariantTypeNode.md)
+- [`EnumTupleVariantTypeNode`](./EnumTupleVariantTypeNode.md)

+ 7 - 7
packages/nodes/docs/typeNodes/NestedTypeNode.md

@@ -8,13 +8,13 @@ For instance, say we have the following requirement: `NestedTypeNode<StringTypeN
 
 Therefore, when encountering a `NestedTypeNode<T>` requirement, we can either provide the type `T` itself or any nested combination of nodes that includes the following wrappers:
 
--   [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
--   [`HiddenPrefixTypeNode`](./HiddenPrefixTypeNode.md)
--   [`HiddenSuffixTypeNode`](./HiddenSuffixTypeNode.md)
--   [`PostOffsetTypeNode`](./PostOffsetTypeNode.md)
--   [`PreOffsetTypeNode`](./PreOffsetTypeNode.md)
--   [`SentinelTypeNode`](./SentinelTypeNode.md)
--   [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
+- [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
+- [`HiddenPrefixTypeNode`](./HiddenPrefixTypeNode.md)
+- [`HiddenSuffixTypeNode`](./HiddenSuffixTypeNode.md)
+- [`PostOffsetTypeNode`](./PostOffsetTypeNode.md)
+- [`PreOffsetTypeNode`](./PreOffsetTypeNode.md)
+- [`SentinelTypeNode`](./SentinelTypeNode.md)
+- [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
 
 ## Functions
 

+ 3 - 3
packages/nodes/docs/typeNodes/PostOffsetTypeNode.md

@@ -77,9 +77,9 @@ offset = -2
 >
 > Here is an exhaustive list of all `TypeNodes` that create sub-buffers:
 >
-> -   [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
-> -   [`SentinelTypeNode`](./SentinelTypeNode.md)
-> -   [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
+> - [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
+> - [`SentinelTypeNode`](./SentinelTypeNode.md)
+> - [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
 
 ### `padded`
 

+ 3 - 3
packages/nodes/docs/typeNodes/PreOffsetTypeNode.md

@@ -76,9 +76,9 @@ offset = -2
 >
 > Here is an exhaustive list of all `TypeNodes` that create sub-buffers:
 >
-> -   [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
-> -   [`SentinelTypeNode`](./SentinelTypeNode.md)
-> -   [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
+> - [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
+> - [`SentinelTypeNode`](./SentinelTypeNode.md)
+> - [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
 
 ### `padded`
 

+ 25 - 25
packages/nodes/docs/typeNodes/README.md

@@ -2,28 +2,28 @@
 
 The `TypeNode` type helper represents all the available type nodes as well as the `DefinedTypeLinkNode` which allows us to reuse a pre-defined type node. Note that `TypeNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`AmountTypeNode`](./AmountTypeNode.md)
--   [`ArrayTypeNode`](./ArrayTypeNode.md)
--   [`BooleanTypeNode`](./BooleanTypeNode.md)
--   [`BytesTypeNode`](./BytesTypeNode.md)
--   [`DateTimeTypeNode`](./DateTimeTypeNode.md)
--   [`DefinedTypeLinkNode`](../linkNodes/DefinedTypeLinkNode.md)
--   [`EnumTypeNode`](./EnumTypeNode.md)
--   [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
--   [`HiddenPrefixTypeNode`](./HiddenPrefixTypeNode.md)
--   [`HiddenSuffixTypeNode`](./HiddenSuffixTypeNode.md)
--   [`MapTypeNode`](./MapTypeNode.md)
--   [`NumberTypeNode`](./NumberTypeNode.md)
--   [`OptionTypeNode`](./OptionTypeNode.md)
--   [`PostOffsetTypeNode`](./PostOffsetTypeNode.md)
--   [`PreOffsetTypeNode`](./PreOffsetTypeNode.md)
--   [`PublicKeyTypeNode`](./PublicKeyTypeNode.md)
--   [`RemainderOptionTypeNode`](./RemainderOptionTypeNode.md)
--   [`SentinelTypeNode`](./SentinelTypeNode.md)
--   [`SetTypeNode`](./SetTypeNode.md)
--   [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
--   [`SolAmountTypeNode`](./SolAmountTypeNode.md)
--   [`StringTypeNode`](./StringTypeNode.md)
--   [`StructTypeNode`](./StructTypeNode.md)
--   [`TupleTypeNode`](./TupleTypeNode.md)
--   [`ZeroableOptionTypeNode`](./ZeroableOptionTypeNode.md)
+- [`AmountTypeNode`](./AmountTypeNode.md)
+- [`ArrayTypeNode`](./ArrayTypeNode.md)
+- [`BooleanTypeNode`](./BooleanTypeNode.md)
+- [`BytesTypeNode`](./BytesTypeNode.md)
+- [`DateTimeTypeNode`](./DateTimeTypeNode.md)
+- [`DefinedTypeLinkNode`](../linkNodes/DefinedTypeLinkNode.md)
+- [`EnumTypeNode`](./EnumTypeNode.md)
+- [`FixedSizeTypeNode`](./FixedSizeTypeNode.md)
+- [`HiddenPrefixTypeNode`](./HiddenPrefixTypeNode.md)
+- [`HiddenSuffixTypeNode`](./HiddenSuffixTypeNode.md)
+- [`MapTypeNode`](./MapTypeNode.md)
+- [`NumberTypeNode`](./NumberTypeNode.md)
+- [`OptionTypeNode`](./OptionTypeNode.md)
+- [`PostOffsetTypeNode`](./PostOffsetTypeNode.md)
+- [`PreOffsetTypeNode`](./PreOffsetTypeNode.md)
+- [`PublicKeyTypeNode`](./PublicKeyTypeNode.md)
+- [`RemainderOptionTypeNode`](./RemainderOptionTypeNode.md)
+- [`SentinelTypeNode`](./SentinelTypeNode.md)
+- [`SetTypeNode`](./SetTypeNode.md)
+- [`SizePrefixTypeNode`](./SizePrefixTypeNode.md)
+- [`SolAmountTypeNode`](./SolAmountTypeNode.md)
+- [`StringTypeNode`](./StringTypeNode.md)
+- [`StructTypeNode`](./StructTypeNode.md)
+- [`TupleTypeNode`](./TupleTypeNode.md)
+- [`ZeroableOptionTypeNode`](./ZeroableOptionTypeNode.md)

+ 14 - 14
packages/nodes/docs/valueNodes/README.md

@@ -2,17 +2,17 @@
 
 The `ValueNode` type helper represents all the available value nodes. Note that `ValueNode` is a type alias and cannot be used directly as a node. Instead you may use one of the following nodes:
 
--   [`ArrayValueNode`](./ArrayValueNode.md)
--   [`BytesValueNode`](./BytesValueNode.md)
--   [`BooleanValueNode`](./BooleanValueNode.md)
--   [`ConstantValueNode`](./ConstantValueNode.md)
--   [`EnumValueNode`](./EnumValueNode.md)
--   [`MapValueNode`](./MapValueNode.md)
--   [`NoneValueNode`](./NoneValueNode.md)
--   [`NumberValueNode`](./NumberValueNode.md)
--   [`PublicKeyValueNode`](./PublicKeyValueNode.md)
--   [`SetValueNode`](./SetValueNode.md)
--   [`SomeValueNode`](./SomeValueNode.md)
--   [`StringValueNode`](./StringValueNode.md)
--   [`StructValueNode`](./StructValueNode.md)
--   [`TupleValueNode`](./TupleValueNode.md)
+- [`ArrayValueNode`](./ArrayValueNode.md)
+- [`BytesValueNode`](./BytesValueNode.md)
+- [`BooleanValueNode`](./BooleanValueNode.md)
+- [`ConstantValueNode`](./ConstantValueNode.md)
+- [`EnumValueNode`](./EnumValueNode.md)
+- [`MapValueNode`](./MapValueNode.md)
+- [`NoneValueNode`](./NoneValueNode.md)
+- [`NumberValueNode`](./NumberValueNode.md)
+- [`PublicKeyValueNode`](./PublicKeyValueNode.md)
+- [`SetValueNode`](./SetValueNode.md)
+- [`SomeValueNode`](./SomeValueNode.md)
+- [`StringValueNode`](./StringValueNode.md)
+- [`StructValueNode`](./StructValueNode.md)
+- [`TupleValueNode`](./TupleValueNode.md)

+ 1 - 0
packages/renderers-js-umi/e2e/test.sh

@@ -1,4 +1,5 @@
 #!/usr/bin/env bash
+set -eux
 
 function start_validator() {
     if ! lsof -t -i:8899; then

+ 2 - 1
packages/renderers-js-umi/src/renderVisitor.ts

@@ -1,6 +1,7 @@
 import { deleteDirectory } from '@codama/renderers-core';
 import { LogLevel, throwValidatorItemsVisitor } from '@codama/validators';
 import { rootNodeVisitor, visit } from '@codama/visitors-core';
+import { Plugin } from 'prettier';
 import * as estreePlugin from 'prettier/plugins/estree';
 import * as typeScriptPlugin from 'prettier/plugins/typescript';
 import { format } from 'prettier/standalone';
@@ -20,7 +21,7 @@ export type RenderOptions = GetRenderMapOptions & {
 const DEFAULT_PRETTIER_OPTIONS: PrettierOptions = {
     arrowParens: 'always',
     parser: 'typescript',
-    plugins: [estreePlugin, typeScriptPlugin],
+    plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],
     printWidth: 80,
     semi: true,
     singleQuote: true,

+ 2 - 1
packages/renderers-js-umi/test/_setup.ts

@@ -1,4 +1,5 @@
 import { RenderMap } from '@codama/renderers-core';
+import { Plugin } from 'prettier';
 import * as estreePlugin from 'prettier/plugins/estree';
 import * as typeScriptPlugin from 'prettier/plugins/typescript';
 import { format } from 'prettier/standalone';
@@ -7,7 +8,7 @@ import { expect } from 'vitest';
 const PRETTIER_OPTIONS: Parameters<typeof format>[1] = {
     arrowParens: 'always',
     parser: 'typescript',
-    plugins: [estreePlugin, typeScriptPlugin],
+    plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],
     printWidth: 80,
     semi: true,
     singleQuote: true,

+ 1 - 0
packages/renderers-js/e2e/test.sh

@@ -1,4 +1,5 @@
 #!/usr/bin/env bash
+set -eux
 
 function start_validator() {
     if ! lsof -t -i:8899; then

+ 2 - 1
packages/renderers-js/src/renderVisitor.ts

@@ -1,5 +1,6 @@
 import { deleteDirectory } from '@codama/renderers-core';
 import { rootNodeVisitor, visit } from '@codama/visitors-core';
+import { Plugin } from 'prettier';
 import * as estreePlugin from 'prettier/plugins/estree';
 import * as typeScriptPlugin from 'prettier/plugins/typescript';
 import { format } from 'prettier/standalone';
@@ -17,7 +18,7 @@ export type RenderOptions = GetRenderMapOptions & {
 const DEFAULT_PRETTIER_OPTIONS: PrettierOptions = {
     arrowParens: 'always',
     parser: 'typescript',
-    plugins: [estreePlugin, typeScriptPlugin],
+    plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],
     printWidth: 80,
     semi: true,
     singleQuote: true,

+ 2 - 1
packages/renderers-js/test/_setup.ts

@@ -1,4 +1,5 @@
 import { RenderMap } from '@codama/renderers-core';
+import { Plugin } from 'prettier';
 import * as estreePlugin from 'prettier/plugins/estree';
 import * as typeScriptPlugin from 'prettier/plugins/typescript';
 import { format } from 'prettier/standalone';
@@ -7,7 +8,7 @@ import { expect } from 'vitest';
 const PRETTIER_OPTIONS: Parameters<typeof format>[1] = {
     arrowParens: 'always',
     parser: 'typescript',
-    plugins: [estreePlugin, typeScriptPlugin],
+    plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],
     printWidth: 80,
     semi: true,
     singleQuote: true,

+ 4 - 4
packages/renderers-rust/README.md

@@ -57,10 +57,10 @@ The Rust renderer provides sensible default traits when generating the various R
 
 Using the `traitOptions` attribute, you may configure the default traits that will be applied to every Rust type. These default traits can be configured using 4 different attributes:
 
--   `baseDefaults`: The default traits to implement for all types.
--   `dataEnumDefaults`: The default traits to implement for all data enum types, in addition to the `baseDefaults` traits. Data enums are enums with at least one non-unit variant — e.g. `pub enum Command { Write(String), Quit }`.
--   `scalarEnumDefaults`: The default traits to implement for all scalar enum types, in addition to the `baseDefaults` traits. Scalar enums are enums with unit variants only — e.g. `pub enum Feedback { Good, Bad }`.
--   `structDefaults`: The default traits to implement for all struct types, in addition to the `baseDefaults` traits.
+- `baseDefaults`: The default traits to implement for all types.
+- `dataEnumDefaults`: The default traits to implement for all data enum types, in addition to the `baseDefaults` traits. Data enums are enums with at least one non-unit variant — e.g. `pub enum Command { Write(String), Quit }`.
+- `scalarEnumDefaults`: The default traits to implement for all scalar enum types, in addition to the `baseDefaults` traits. Scalar enums are enums with unit variants only — e.g. `pub enum Feedback { Good, Bad }`.
+- `structDefaults`: The default traits to implement for all struct types, in addition to the `baseDefaults` traits.
 
 Note that you must provide the fully qualified name of the traits you provide (e.g. `serde::Serialize`). Here are the default values for these attributes:
 

+ 1 - 0
packages/renderers-rust/e2e/test.sh

@@ -1,4 +1,5 @@
 #!/usr/bin/env bash
+set -eux
 
 function test_project() {
     ./e2e/generate.cjs $1

+ 3 - 3
packages/renderers/README.md

@@ -22,9 +22,9 @@ pnpm install @codama/renderers
 
 The following renderer packages are included in this package:
 
--   [`@codama/renderers-js`](../renderers-js) as `renderJavaScriptVisitor`
--   [`@codama/renderers-js-umi`](../renderers-js-umi) as `renderJavaScriptUmiVisitor`
--   [`@codama/renderers-rust`](../renderers-rust) as `renderRustVisitor`
+- [`@codama/renderers-js`](../renderers-js) as `renderJavaScriptVisitor`
+- [`@codama/renderers-js-umi`](../renderers-js-umi) as `renderJavaScriptUmiVisitor`
+- [`@codama/renderers-rust`](../renderers-rust) as `renderRustVisitor`
 
 ```ts
 // node ./codama.mjs

+ 20 - 20
packages/visitors-core/README.md

@@ -185,8 +185,8 @@ const node = visit(numberTypeNode('u32'), nonNullableIdentityVisitor());
 
 The `mergeVisitor` returns a `Visitor<T>` by accepting two functions such that:
 
--   The first function is used on the leaves of the Codama IDL and returns a type `T`.
--   The second function is used to merge the values `T[]` of the children of a node and aggregate them into a type `T`.
+- The first function is used on the leaves of the Codama IDL and returns a type `T`.
+- The second function is used to merge the values `T[]` of the children of a node and aggregate them into a type `T`.
 
 For instance, here is how we can use the `mergeVisitor` to create a nested string representation of node kinds.
 
@@ -224,8 +224,8 @@ The `extendVisitor` function accepts a base visitor and a set of function wrappe
 
 Each function wrapper is given the `node` being visited and an object composed of two elements:
 
--   `next`: A function that can be called to delegate to the base visitor — e.g. `next(node)`.
--   `self`: The visitor itself, allowing for recursive calls.
+- `next`: A function that can be called to delegate to the base visitor — e.g. `next(node)`.
+- `self`: The visitor itself, allowing for recursive calls.
 
 To illustrate this, consider the following base visitor that counts the number of nodes.
 
@@ -356,9 +356,9 @@ const visitor = pipe(
 
 For instance, here's an example using the `pipe` function to transform an `identityVisitor` into a visitor that:
 
--   Transforms all number types into `u64` numbers.
--   Logs the amount of items in tuple types.
--   Wraps the visited node in a `DefinedTypeNode` labelled "gift".
+- Transforms all number types into `u64` numbers.
+- Logs the amount of items in tuple types.
+- Wraps the visited node in a `DefinedTypeNode` labelled "gift".
 
 ```ts
 const visitor = pipe(
@@ -553,18 +553,18 @@ When visiting a tree of nodes, it is often useful to be explicit about the paths
 
 To that end, the `NodeSelector` type represents a node selection that can take two forms:
 
--   A `NodeSelectorFunction` of type `(path: NodePath) => boolean`. In this case, the provided function is used to determine if the last node in the provided `NodePath` should be selected.
--   A `NodeSelectorPath` of type `string`. In this case, the provided string uses a simple syntax to select nodes.
+- A `NodeSelectorFunction` of type `(path: NodePath) => boolean`. In this case, the provided function is used to determine if the last node in the provided `NodePath` should be selected.
+- A `NodeSelectorPath` of type `string`. In this case, the provided string uses a simple syntax to select nodes.
 
 The `NodeSelectorPath` syntax is as follows:
 
--   Plain text is used to match the name of a node, if any. For instance, `token` will match any node named "token".
--   Square brackets `[]` are used to match the kind of a node. For instance, `[programNode]` will match any `ProgramNode`.
--   Plain text and square brackets can be combined to match both the name and the kind of a node. For instance, `[programNode]token` will match any `ProgramNode` named "token".
--   Plain texts and/or square brackets can be chained using dots `.` to match several nodes in the current `NodeStack`.
--   Dot-separated paths must follow the provided order but do not need to be contiguous or exhaustive. This means that `a.b.c` will match a `NodeStack` that looks like `x.a.y.b.z.c` but not `b.a.c`.
--   The last item of a dot-separated path must match the last node of the `NodeStack`. For instance, `a.b` will not match `a.b.x`.
--   The wildcard `*` can be used at the end of the path to match any node within the matching path. For instance, `a.b.*` will match `a.b.x`.
+- Plain text is used to match the name of a node, if any. For instance, `token` will match any node named "token".
+- Square brackets `[]` are used to match the kind of a node. For instance, `[programNode]` will match any `ProgramNode`.
+- Plain text and square brackets can be combined to match both the name and the kind of a node. For instance, `[programNode]token` will match any `ProgramNode` named "token".
+- Plain texts and/or square brackets can be chained using dots `.` to match several nodes in the current `NodeStack`.
+- Dot-separated paths must follow the provided order but do not need to be contiguous or exhaustive. This means that `a.b.c` will match a `NodeStack` that looks like `x.a.y.b.z.c` but not `b.a.c`.
+- The last item of a dot-separated path must match the last node of the `NodeStack`. For instance, `a.b` will not match `a.b.x`.
+- The wildcard `*` can be used at the end of the path to match any node within the matching path. For instance, `a.b.*` will match `a.b.x`.
 
 Here are some examples:
 
@@ -600,8 +600,8 @@ The `bottomUpTransformerVisitor` traverses the nodes and intercepts them on the
 
 This visitor accepts an array of `transformers` where each transformer is an object with the following properties:
 
--   `select`: A `NodeSelector` or an array of `NodeSelectors` used to select the nodes we want to transform. When multiple selectors are provided, they must all match for the node to be selected.
--   `transform`: A function that accepts the selected node and its `NodeStack`; and returns a new node or `null` to delete the node.
+- `select`: A `NodeSelector` or an array of `NodeSelectors` used to select the nodes we want to transform. When multiple selectors are provided, they must all match for the node to be selected.
+- `transform`: A function that accepts the selected node and its `NodeStack`; and returns a new node or `null` to delete the node.
 
 Here are a few examples:
 
@@ -748,8 +748,8 @@ const accountPath: NodePath<AccountNode> = linkables.getPathOrThrow([...somePath
 
 Note that:
 
--   The path of the recorded node must be provided when recording a linkable node.
--   The path of the link node must be provided when getting a linkable node (or its path) from it.
+- The path of the recorded node must be provided when recording a linkable node.
+- The path of the link node must be provided when getting a linkable node (or its path) from it.
 
 This API may be used with the `recordLinkablesOnFirstVisitVisitor` to record the linkable nodes before the first node visit; as well as the `recordNodeStackVisitor` to keep track of the current node path when accessing the linkable nodes.
 

+ 3 - 3
packages/visitors/README.md

@@ -98,9 +98,9 @@ codama.update(deduplicateIdenticalDefinedTypesVisitor());
 
 This visitor fills any missing `PdaSeedValueNodes` from `PdaValueNodes` using the provided `NodePath<InstructionNode>` such that:
 
--   If a `VariablePdaSeedNode` is of type `PublicKeyTypeNode` and the name of the seed matches the name of an account in the `InstructionNode`, then a new `PdaSeedValueNode` will be added with the matching account.
--   Otherwise, if a `VariablePdaSeedNode` is of any other type and the name of the seed matches the name of an argument in the `InstructionNode`, then a new `PdaSeedValueNode` will be added with the matching argument.
--   Otherwise, no `PdaSeedValueNode` will be added.
+- If a `VariablePdaSeedNode` is of type `PublicKeyTypeNode` and the name of the seed matches the name of an account in the `InstructionNode`, then a new `PdaSeedValueNode` will be added with the matching account.
+- Otherwise, if a `VariablePdaSeedNode` is of any other type and the name of the seed matches the name of an argument in the `InstructionNode`, then a new `PdaSeedValueNode` will be added with the matching argument.
+- Otherwise, no `PdaSeedValueNode` will be added.
 
 It also requires a [`LinkableDictionary`](../visitors-core/README.md#linkable-dictionary) to resolve any link nodes and an optional `strictMode` boolean to throw an error if seeds are still missing after the visitor has run.