@metaplex-foundation/kinobi 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/cjs/Kinobi.js +28 -0
- package/dist/cjs/Kinobi.js.map +1 -0
- package/dist/cjs/idl/Idl.js +3 -0
- package/dist/cjs/idl/Idl.js.map +1 -0
- package/dist/cjs/idl/IdlAccount.js +3 -0
- package/dist/cjs/idl/IdlAccount.js.map +1 -0
- package/dist/cjs/idl/IdlDefinedType.js +3 -0
- package/dist/cjs/idl/IdlDefinedType.js.map +1 -0
- package/dist/cjs/idl/IdlError.js +3 -0
- package/dist/cjs/idl/IdlError.js.map +1 -0
- package/dist/cjs/idl/IdlInstruction.js +3 -0
- package/dist/cjs/idl/IdlInstruction.js.map +1 -0
- package/dist/cjs/idl/IdlType.js +3 -0
- package/dist/cjs/idl/IdlType.js.map +1 -0
- package/dist/cjs/idl/index.js +23 -0
- package/dist/cjs/idl/index.js.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/logs.js +64 -0
- package/dist/cjs/logs.js.map +1 -0
- package/dist/cjs/nodes/AccountNode.js +89 -0
- package/dist/cjs/nodes/AccountNode.js.map +1 -0
- package/dist/cjs/nodes/DefinedTypeNode.js +43 -0
- package/dist/cjs/nodes/DefinedTypeNode.js.map +1 -0
- package/dist/cjs/nodes/ErrorNode.js +43 -0
- package/dist/cjs/nodes/ErrorNode.js.map +1 -0
- package/dist/cjs/nodes/InstructionNode.js +128 -0
- package/dist/cjs/nodes/InstructionNode.js.map +1 -0
- package/dist/cjs/nodes/Node.js +15 -0
- package/dist/cjs/nodes/Node.js.map +1 -0
- package/dist/cjs/nodes/ProgramNode.js +64 -0
- package/dist/cjs/nodes/ProgramNode.js.map +1 -0
- package/dist/cjs/nodes/RootNode.js +48 -0
- package/dist/cjs/nodes/RootNode.js.map +1 -0
- package/dist/cjs/nodes/TypeArrayNode.js +31 -0
- package/dist/cjs/nodes/TypeArrayNode.js.map +1 -0
- package/dist/cjs/nodes/TypeDefinedLinkNode.js +30 -0
- package/dist/cjs/nodes/TypeDefinedLinkNode.js.map +1 -0
- package/dist/cjs/nodes/TypeEnumEmptyVariantNode.js +30 -0
- package/dist/cjs/nodes/TypeEnumEmptyVariantNode.js.map +1 -0
- package/dist/cjs/nodes/TypeEnumNode.js +52 -0
- package/dist/cjs/nodes/TypeEnumNode.js.map +1 -0
- package/dist/cjs/nodes/TypeEnumStructVariantNode.js +37 -0
- package/dist/cjs/nodes/TypeEnumStructVariantNode.js.map +1 -0
- package/dist/cjs/nodes/TypeEnumTupleVariantNode.js +33 -0
- package/dist/cjs/nodes/TypeEnumTupleVariantNode.js.map +1 -0
- package/dist/cjs/nodes/TypeEnumVariantNode.js +20 -0
- package/dist/cjs/nodes/TypeEnumVariantNode.js.map +1 -0
- package/dist/cjs/nodes/TypeLeafNode.js +61 -0
- package/dist/cjs/nodes/TypeLeafNode.js.map +1 -0
- package/dist/cjs/nodes/TypeLeafWrapperNode.js +26 -0
- package/dist/cjs/nodes/TypeLeafWrapperNode.js.map +1 -0
- package/dist/cjs/nodes/TypeMapNode.js +35 -0
- package/dist/cjs/nodes/TypeMapNode.js.map +1 -0
- package/dist/cjs/nodes/TypeNode.js +103 -0
- package/dist/cjs/nodes/TypeNode.js.map +1 -0
- package/dist/cjs/nodes/TypeOptionNode.js +32 -0
- package/dist/cjs/nodes/TypeOptionNode.js.map +1 -0
- package/dist/cjs/nodes/TypeSetNode.js +32 -0
- package/dist/cjs/nodes/TypeSetNode.js.map +1 -0
- package/dist/cjs/nodes/TypeStructFieldNode.js +42 -0
- package/dist/cjs/nodes/TypeStructFieldNode.js.map +1 -0
- package/dist/cjs/nodes/TypeStructNode.js +32 -0
- package/dist/cjs/nodes/TypeStructNode.js.map +1 -0
- package/dist/cjs/nodes/TypeTupleNode.js +29 -0
- package/dist/cjs/nodes/TypeTupleNode.js.map +1 -0
- package/dist/cjs/nodes/TypeVecNode.js +29 -0
- package/dist/cjs/nodes/TypeVecNode.js.map +1 -0
- package/dist/cjs/nodes/ValueNode.js +57 -0
- package/dist/cjs/nodes/ValueNode.js.map +1 -0
- package/dist/cjs/nodes/index.js +42 -0
- package/dist/cjs/nodes/index.js.map +1 -0
- package/dist/cjs/renderers/RenderMap.js +35 -0
- package/dist/cjs/renderers/RenderMap.js.map +1 -0
- package/dist/cjs/renderers/WriteRenderMapVisitor.js +16 -0
- package/dist/cjs/renderers/WriteRenderMapVisitor.js.map +1 -0
- package/dist/cjs/renderers/index.js +21 -0
- package/dist/cjs/renderers/index.js.map +1 -0
- package/dist/cjs/renderers/js/GetJavaScriptRenderMapVisitor.js +360 -0
- package/dist/cjs/renderers/js/GetJavaScriptRenderMapVisitor.js.map +1 -0
- package/dist/cjs/renderers/js/GetJavaScriptTypeManifestVisitor.js +439 -0
- package/dist/cjs/renderers/js/GetJavaScriptTypeManifestVisitor.js.map +1 -0
- package/dist/cjs/renderers/js/GetJavaScriptValidatorBagVisitor.js +198 -0
- package/dist/cjs/renderers/js/GetJavaScriptValidatorBagVisitor.js.map +1 -0
- package/dist/cjs/renderers/js/JavaScriptImportMap.js +83 -0
- package/dist/cjs/renderers/js/JavaScriptImportMap.js.map +1 -0
- package/dist/cjs/renderers/js/RenderJavaScriptValueNode.js +125 -0
- package/dist/cjs/renderers/js/RenderJavaScriptValueNode.js.map +1 -0
- package/dist/cjs/renderers/js/RenderJavaScriptVisitor.js +28 -0
- package/dist/cjs/renderers/js/RenderJavaScriptVisitor.js.map +1 -0
- package/dist/cjs/renderers/js/index.js +23 -0
- package/dist/cjs/renderers/js/index.js.map +1 -0
- package/dist/cjs/renderers/js/templates/accountsIndex.njk +9 -0
- package/dist/cjs/renderers/js/templates/accountsPage.njk +122 -0
- package/dist/cjs/renderers/js/templates/definedTypesIndex.njk +9 -0
- package/dist/cjs/renderers/js/templates/definedTypesPage.njk +13 -0
- package/dist/cjs/renderers/js/templates/definedTypesPageDataEnums.njk +26 -0
- package/dist/cjs/renderers/js/templates/errorsIndex.njk +9 -0
- package/dist/cjs/renderers/js/templates/errorsPage.njk +43 -0
- package/dist/cjs/renderers/js/templates/instructionsIndex.njk +9 -0
- package/dist/cjs/renderers/js/templates/instructionsPage.njk +71 -0
- package/dist/cjs/renderers/js/templates/instructionsPageAccountMetas.njk +61 -0
- package/dist/cjs/renderers/js/templates/instructionsPageAccounts.njk +12 -0
- package/dist/cjs/renderers/js/templates/instructionsPageArgs.njk +7 -0
- package/dist/cjs/renderers/js/templates/layout.njk +9 -0
- package/dist/cjs/renderers/js/templates/macros.njk +40 -0
- package/dist/cjs/renderers/js/templates/programsIndex.njk +9 -0
- package/dist/cjs/renderers/js/templates/programsPage.njk +23 -0
- package/dist/cjs/renderers/js/templates/rootIndex.njk +23 -0
- package/dist/cjs/renderers/utils.js +42 -0
- package/dist/cjs/renderers/utils.js.map +1 -0
- package/dist/cjs/utils.js +47 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/visitors/BaseDelegateVisitor.js +73 -0
- package/dist/cjs/visitors/BaseDelegateVisitor.js.map +1 -0
- package/dist/cjs/visitors/BaseNodeOrNullVisitor.js +183 -0
- package/dist/cjs/visitors/BaseNodeOrNullVisitor.js.map +1 -0
- package/dist/cjs/visitors/BaseNodeVisitor.js +144 -0
- package/dist/cjs/visitors/BaseNodeVisitor.js.map +1 -0
- package/dist/cjs/visitors/BaseThrowVisitor.js +70 -0
- package/dist/cjs/visitors/BaseThrowVisitor.js.map +1 -0
- package/dist/cjs/visitors/BaseVoidVisitor.js +81 -0
- package/dist/cjs/visitors/BaseVoidVisitor.js.map +1 -0
- package/dist/cjs/visitors/DefaultVisitor.js +53 -0
- package/dist/cjs/visitors/DefaultVisitor.js.map +1 -0
- package/dist/cjs/visitors/Dependency.js +3 -0
- package/dist/cjs/visitors/Dependency.js.map +1 -0
- package/dist/cjs/visitors/NodeSelector.js +79 -0
- package/dist/cjs/visitors/NodeSelector.js.map +1 -0
- package/dist/cjs/visitors/NodeStack.js +98 -0
- package/dist/cjs/visitors/NodeStack.js.map +1 -0
- package/dist/cjs/visitors/ValidatorBag.js +64 -0
- package/dist/cjs/visitors/ValidatorBag.js.map +1 -0
- package/dist/cjs/visitors/Visitable.js +3 -0
- package/dist/cjs/visitors/Visitable.js.map +1 -0
- package/dist/cjs/visitors/Visitor.js +3 -0
- package/dist/cjs/visitors/Visitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/GetByteSizeVisitor.js +130 -0
- package/dist/cjs/visitors/aggregators/GetByteSizeVisitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/GetDefaultValidatorBagVisitor.js +300 -0
- package/dist/cjs/visitors/aggregators/GetDefaultValidatorBagVisitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/GetDefinedTypeHistogramVisitor.js +157 -0
- package/dist/cjs/visitors/aggregators/GetDefinedTypeHistogramVisitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/GetNodeInlineStringVisitor.js +111 -0
- package/dist/cjs/visitors/aggregators/GetNodeInlineStringVisitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/GetNodeTreeStringVisitor.js +219 -0
- package/dist/cjs/visitors/aggregators/GetNodeTreeStringVisitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/GetResolvedInstructionAccountsVisitor.js +121 -0
- package/dist/cjs/visitors/aggregators/GetResolvedInstructionAccountsVisitor.js.map +1 -0
- package/dist/cjs/visitors/aggregators/index.js +23 -0
- package/dist/cjs/visitors/aggregators/index.js.map +1 -0
- package/dist/cjs/visitors/index.js +31 -0
- package/dist/cjs/visitors/index.js.map +1 -0
- package/dist/cjs/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.js +94 -0
- package/dist/cjs/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/AutoSetFixedAccountSizesVisitor.js +56 -0
- package/dist/cjs/visitors/transformers/AutoSetFixedAccountSizesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.js +100 -0
- package/dist/cjs/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.js +83 -0
- package/dist/cjs/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/DeleteNodesVisitor.js +14 -0
- package/dist/cjs/visitors/transformers/DeleteNodesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.js +62 -0
- package/dist/cjs/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.js +202 -0
- package/dist/cjs/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/SetInstructionDiscriminatorsVisitor.js +59 -0
- package/dist/cjs/visitors/transformers/SetInstructionDiscriminatorsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/SetLeafWrappersVisitor.js +43 -0
- package/dist/cjs/visitors/transformers/SetLeafWrappersVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/SetMissingDefinedTypesVisitor.js +85 -0
- package/dist/cjs/visitors/transformers/SetMissingDefinedTypesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/SetStructDefaultValuesVisitor.js +62 -0
- package/dist/cjs/visitors/transformers/SetStructDefaultValuesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/TransformNodesVisitor.js +156 -0
- package/dist/cjs/visitors/transformers/TransformNodesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/TransformU8ArraysToBytesVisitor.js +49 -0
- package/dist/cjs/visitors/transformers/TransformU8ArraysToBytesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UnwrapDefinedTypesVisitor.js +69 -0
- package/dist/cjs/visitors/transformers/UnwrapDefinedTypesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.js +59 -0
- package/dist/cjs/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UnwrapInstructionArgsStructVisitor.js +44 -0
- package/dist/cjs/visitors/transformers/UnwrapInstructionArgsStructVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UnwrapStructVisitor.js +74 -0
- package/dist/cjs/visitors/transformers/UnwrapStructVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UpdateAccountsVisitor.js +57 -0
- package/dist/cjs/visitors/transformers/UpdateAccountsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UpdateDefinedTypesVisitor.js +72 -0
- package/dist/cjs/visitors/transformers/UpdateDefinedTypesVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UpdateErrorsVisitor.js +50 -0
- package/dist/cjs/visitors/transformers/UpdateErrorsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UpdateInstructionsVisitor.js +97 -0
- package/dist/cjs/visitors/transformers/UpdateInstructionsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/UpdateProgramsVisitor.js +49 -0
- package/dist/cjs/visitors/transformers/UpdateProgramsVisitor.js.map +1 -0
- package/dist/cjs/visitors/transformers/_renameHelpers.js +49 -0
- package/dist/cjs/visitors/transformers/_renameHelpers.js.map +1 -0
- package/dist/cjs/visitors/transformers/index.js +39 -0
- package/dist/cjs/visitors/transformers/index.js.map +1 -0
- package/dist/cjs/visitors/workers/ConsoleLogVisitor.js +12 -0
- package/dist/cjs/visitors/workers/ConsoleLogVisitor.js.map +1 -0
- package/dist/cjs/visitors/workers/ThrowValidatorItemsVisitor.js +38 -0
- package/dist/cjs/visitors/workers/ThrowValidatorItemsVisitor.js.map +1 -0
- package/dist/cjs/visitors/workers/index.js +19 -0
- package/dist/cjs/visitors/workers/index.js.map +1 -0
- package/dist/types/Kinobi.d.ts +9 -0
- package/dist/types/idl/Idl.d.ts +18 -0
- package/dist/types/idl/IdlAccount.d.ts +19 -0
- package/dist/types/idl/IdlDefinedType.d.ts +6 -0
- package/dist/types/idl/IdlError.d.ts +6 -0
- package/dist/types/idl/IdlInstruction.d.ts +25 -0
- package/dist/types/idl/IdlType.d.ts +60 -0
- package/dist/types/idl/index.d.ts +6 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/logs.d.ts +9 -0
- package/dist/types/nodes/AccountNode.d.ts +51 -0
- package/dist/types/nodes/DefinedTypeNode.d.ts +24 -0
- package/dist/types/nodes/ErrorNode.d.ts +21 -0
- package/dist/types/nodes/InstructionNode.d.ts +88 -0
- package/dist/types/nodes/Node.d.ts +12 -0
- package/dist/types/nodes/ProgramNode.d.ts +31 -0
- package/dist/types/nodes/RootNode.d.ts +23 -0
- package/dist/types/nodes/TypeArrayNode.d.ts +14 -0
- package/dist/types/nodes/TypeDefinedLinkNode.d.ts +12 -0
- package/dist/types/nodes/TypeEnumEmptyVariantNode.d.ts +12 -0
- package/dist/types/nodes/TypeEnumNode.d.ts +16 -0
- package/dist/types/nodes/TypeEnumStructVariantNode.d.ts +14 -0
- package/dist/types/nodes/TypeEnumTupleVariantNode.d.ts +14 -0
- package/dist/types/nodes/TypeEnumVariantNode.d.ts +7 -0
- package/dist/types/nodes/TypeLeafNode.d.ts +18 -0
- package/dist/types/nodes/TypeLeafWrapperNode.d.ts +21 -0
- package/dist/types/nodes/TypeMapNode.d.ts +15 -0
- package/dist/types/nodes/TypeNode.d.ts +19 -0
- package/dist/types/nodes/TypeOptionNode.d.ts +14 -0
- package/dist/types/nodes/TypeSetNode.d.ts +14 -0
- package/dist/types/nodes/TypeStructFieldNode.d.ts +24 -0
- package/dist/types/nodes/TypeStructNode.d.ts +14 -0
- package/dist/types/nodes/TypeTupleNode.d.ts +13 -0
- package/dist/types/nodes/TypeVecNode.d.ts +13 -0
- package/dist/types/nodes/ValueNode.d.ts +59 -0
- package/dist/types/nodes/index.d.ts +25 -0
- package/dist/types/renderers/RenderMap.d.ts +8 -0
- package/dist/types/renderers/WriteRenderMapVisitor.d.ts +8 -0
- package/dist/types/renderers/index.d.ts +4 -0
- package/dist/types/renderers/js/GetJavaScriptRenderMapVisitor.d.ts +34 -0
- package/dist/types/renderers/js/GetJavaScriptTypeManifestVisitor.d.ts +44 -0
- package/dist/types/renderers/js/GetJavaScriptValidatorBagVisitor.d.ts +19 -0
- package/dist/types/renderers/js/JavaScriptImportMap.d.ts +11 -0
- package/dist/types/renderers/js/RenderJavaScriptValueNode.d.ts +6 -0
- package/dist/types/renderers/js/RenderJavaScriptVisitor.d.ts +14 -0
- package/dist/types/renderers/js/index.d.ts +6 -0
- package/dist/types/renderers/utils.d.ts +5 -0
- package/dist/types/utils.d.ts +8 -0
- package/dist/types/visitors/BaseDelegateVisitor.d.ts +28 -0
- package/dist/types/visitors/BaseNodeOrNullVisitor.d.ts +25 -0
- package/dist/types/visitors/BaseNodeVisitor.d.ts +25 -0
- package/dist/types/visitors/BaseThrowVisitor.d.ts +25 -0
- package/dist/types/visitors/BaseVoidVisitor.d.ts +25 -0
- package/dist/types/visitors/DefaultVisitor.d.ts +5 -0
- package/dist/types/visitors/Dependency.d.ts +17 -0
- package/dist/types/visitors/NodeSelector.d.ts +11 -0
- package/dist/types/visitors/NodeStack.d.ts +14 -0
- package/dist/types/visitors/ValidatorBag.d.ts +22 -0
- package/dist/types/visitors/Visitable.d.ts +4 -0
- package/dist/types/visitors/Visitor.d.ts +24 -0
- package/dist/types/visitors/aggregators/GetByteSizeVisitor.d.ts +27 -0
- package/dist/types/visitors/aggregators/GetDefaultValidatorBagVisitor.d.ts +32 -0
- package/dist/types/visitors/aggregators/GetDefinedTypeHistogramVisitor.d.ts +37 -0
- package/dist/types/visitors/aggregators/GetNodeInlineStringVisitor.d.ts +25 -0
- package/dist/types/visitors/aggregators/GetNodeTreeStringVisitor.d.ts +29 -0
- package/dist/types/visitors/aggregators/GetResolvedInstructionAccountsVisitor.d.ts +19 -0
- package/dist/types/visitors/aggregators/index.d.ts +6 -0
- package/dist/types/visitors/index.d.ts +14 -0
- package/dist/types/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.d.ts +8 -0
- package/dist/types/visitors/transformers/AutoSetFixedAccountSizesVisitor.d.ts +5 -0
- package/dist/types/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.d.ts +8 -0
- package/dist/types/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.d.ts +5 -0
- package/dist/types/visitors/transformers/DeleteNodesVisitor.d.ts +5 -0
- package/dist/types/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.d.ts +12 -0
- package/dist/types/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.d.ts +27 -0
- package/dist/types/visitors/transformers/SetInstructionDiscriminatorsVisitor.d.ts +18 -0
- package/dist/types/visitors/transformers/SetLeafWrappersVisitor.d.ts +8 -0
- package/dist/types/visitors/transformers/SetMissingDefinedTypesVisitor.d.ts +7 -0
- package/dist/types/visitors/transformers/SetStructDefaultValuesVisitor.d.ts +11 -0
- package/dist/types/visitors/transformers/TransformNodesVisitor.d.ts +37 -0
- package/dist/types/visitors/transformers/TransformU8ArraysToBytesVisitor.d.ts +8 -0
- package/dist/types/visitors/transformers/UnwrapDefinedTypesVisitor.d.ts +11 -0
- package/dist/types/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.d.ts +5 -0
- package/dist/types/visitors/transformers/UnwrapInstructionArgsStructVisitor.d.ts +4 -0
- package/dist/types/visitors/transformers/UnwrapStructVisitor.d.ts +8 -0
- package/dist/types/visitors/transformers/UpdateAccountsVisitor.d.ts +11 -0
- package/dist/types/visitors/transformers/UpdateDefinedTypesVisitor.d.ts +11 -0
- package/dist/types/visitors/transformers/UpdateErrorsVisitor.d.ts +12 -0
- package/dist/types/visitors/transformers/UpdateInstructionsVisitor.d.ts +41 -0
- package/dist/types/visitors/transformers/UpdateProgramsVisitor.d.ts +9 -0
- package/dist/types/visitors/transformers/_renameHelpers.d.ts +3 -0
- package/dist/types/visitors/transformers/index.d.ts +22 -0
- package/dist/types/visitors/workers/ConsoleLogVisitor.d.ts +4 -0
- package/dist/types/visitors/workers/ThrowValidatorItemsVisitor.d.ts +9 -0
- package/dist/types/visitors/workers/index.d.ts +2 -0
- package/package.json +72 -0
- package/src/Kinobi.ts +28 -0
- package/src/idl/Idl.ts +19 -0
- package/src/idl/IdlAccount.ts +14 -0
- package/src/idl/IdlDefinedType.ts +7 -0
- package/src/idl/IdlError.ts +6 -0
- package/src/idl/IdlInstruction.ts +29 -0
- package/src/idl/IdlType.ts +72 -0
- package/src/idl/index.ts +6 -0
- package/src/index.ts +5 -0
- package/src/logs.ts +77 -0
- package/src/nodes/AccountNode.ts +126 -0
- package/src/nodes/DefinedTypeNode.ts +69 -0
- package/src/nodes/ErrorNode.ts +57 -0
- package/src/nodes/InstructionNode.ts +215 -0
- package/src/nodes/Node.ts +40 -0
- package/src/nodes/ProgramNode.ts +101 -0
- package/src/nodes/RootNode.ts +64 -0
- package/src/nodes/TypeArrayNode.ts +40 -0
- package/src/nodes/TypeDefinedLinkNode.ts +40 -0
- package/src/nodes/TypeEnumEmptyVariantNode.ts +38 -0
- package/src/nodes/TypeEnumNode.ts +67 -0
- package/src/nodes/TypeEnumStructVariantNode.ts +50 -0
- package/src/nodes/TypeEnumTupleVariantNode.ts +46 -0
- package/src/nodes/TypeEnumVariantNode.ts +32 -0
- package/src/nodes/TypeLeafNode.ts +73 -0
- package/src/nodes/TypeLeafWrapperNode.ts +41 -0
- package/src/nodes/TypeMapNode.ts +48 -0
- package/src/nodes/TypeNode.ts +138 -0
- package/src/nodes/TypeOptionNode.ts +41 -0
- package/src/nodes/TypeSetNode.ts +39 -0
- package/src/nodes/TypeStructFieldNode.ts +63 -0
- package/src/nodes/TypeStructNode.ts +43 -0
- package/src/nodes/TypeTupleNode.ts +36 -0
- package/src/nodes/TypeVecNode.ts +34 -0
- package/src/nodes/ValueNode.ts +92 -0
- package/src/nodes/index.ts +25 -0
- package/src/renderers/RenderMap.ts +34 -0
- package/src/renderers/WriteRenderMapVisitor.ts +15 -0
- package/src/renderers/index.ts +4 -0
- package/src/renderers/js/GetJavaScriptRenderMapVisitor.ts +437 -0
- package/src/renderers/js/GetJavaScriptTypeManifestVisitor.ts +522 -0
- package/src/renderers/js/GetJavaScriptValidatorBagVisitor.ts +202 -0
- package/src/renderers/js/JavaScriptImportMap.ts +89 -0
- package/src/renderers/js/RenderJavaScriptValueNode.ts +110 -0
- package/src/renderers/js/RenderJavaScriptVisitor.ts +45 -0
- package/src/renderers/js/index.ts +6 -0
- package/src/renderers/js/templates/accountsIndex.njk +9 -0
- package/src/renderers/js/templates/accountsPage.njk +122 -0
- package/src/renderers/js/templates/definedTypesIndex.njk +9 -0
- package/src/renderers/js/templates/definedTypesPage.njk +13 -0
- package/src/renderers/js/templates/definedTypesPageDataEnums.njk +26 -0
- package/src/renderers/js/templates/errorsIndex.njk +9 -0
- package/src/renderers/js/templates/errorsPage.njk +43 -0
- package/src/renderers/js/templates/instructionsIndex.njk +9 -0
- package/src/renderers/js/templates/instructionsPage.njk +71 -0
- package/src/renderers/js/templates/instructionsPageAccountMetas.njk +61 -0
- package/src/renderers/js/templates/instructionsPageAccounts.njk +12 -0
- package/src/renderers/js/templates/instructionsPageArgs.njk +7 -0
- package/src/renderers/js/templates/layout.njk +9 -0
- package/src/renderers/js/templates/macros.njk +40 -0
- package/src/renderers/js/templates/programsIndex.njk +9 -0
- package/src/renderers/js/templates/programsPage.njk +23 -0
- package/src/renderers/js/templates/rootIndex.njk +23 -0
- package/src/renderers/utils.ts +46 -0
- package/src/utils.ts +41 -0
- package/src/visitors/BaseDelegateVisitor.ts +98 -0
- package/src/visitors/BaseNodeOrNullVisitor.ts +202 -0
- package/src/visitors/BaseNodeVisitor.ts +173 -0
- package/src/visitors/BaseThrowVisitor.ts +101 -0
- package/src/visitors/BaseVoidVisitor.ts +104 -0
- package/src/visitors/DefaultVisitor.ts +45 -0
- package/src/visitors/Dependency.ts +23 -0
- package/src/visitors/NodeSelector.ts +82 -0
- package/src/visitors/NodeStack.ts +109 -0
- package/src/visitors/ValidatorBag.ts +90 -0
- package/src/visitors/Visitable.ts +5 -0
- package/src/visitors/Visitor.ts +36 -0
- package/src/visitors/aggregators/GetByteSizeVisitor.ts +167 -0
- package/src/visitors/aggregators/GetDefaultValidatorBagVisitor.ts +332 -0
- package/src/visitors/aggregators/GetDefinedTypeHistogramVisitor.ts +213 -0
- package/src/visitors/aggregators/GetNodeInlineStringVisitor.ts +140 -0
- package/src/visitors/aggregators/GetNodeTreeStringVisitor.ts +260 -0
- package/src/visitors/aggregators/GetResolvedInstructionAccountsVisitor.ts +153 -0
- package/src/visitors/aggregators/index.ts +6 -0
- package/src/visitors/index.ts +15 -0
- package/src/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.ts +90 -0
- package/src/visitors/transformers/AutoSetFixedAccountSizesVisitor.ts +31 -0
- package/src/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.ts +117 -0
- package/src/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.ts +72 -0
- package/src/visitors/transformers/DeleteNodesVisitor.ts +13 -0
- package/src/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.ts +52 -0
- package/src/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.ts +236 -0
- package/src/visitors/transformers/SetInstructionDiscriminatorsVisitor.ts +54 -0
- package/src/visitors/transformers/SetLeafWrappersVisitor.ts +20 -0
- package/src/visitors/transformers/SetMissingDefinedTypesVisitor.ts +73 -0
- package/src/visitors/transformers/SetStructDefaultValuesVisitor.ts +45 -0
- package/src/visitors/transformers/TransformNodesVisitor.ts +215 -0
- package/src/visitors/transformers/TransformU8ArraysToBytesVisitor.ts +27 -0
- package/src/visitors/transformers/UnwrapDefinedTypesVisitor.ts +65 -0
- package/src/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.ts +35 -0
- package/src/visitors/transformers/UnwrapInstructionArgsStructVisitor.ts +22 -0
- package/src/visitors/transformers/UnwrapStructVisitor.ts +62 -0
- package/src/visitors/transformers/UpdateAccountsVisitor.ts +45 -0
- package/src/visitors/transformers/UpdateDefinedTypesVisitor.ts +71 -0
- package/src/visitors/transformers/UpdateErrorsVisitor.ts +41 -0
- package/src/visitors/transformers/UpdateInstructionsVisitor.ts +135 -0
- package/src/visitors/transformers/UpdateProgramsVisitor.ts +39 -0
- package/src/visitors/transformers/_renameHelpers.ts +47 -0
- package/src/visitors/transformers/index.ts +22 -0
- package/src/visitors/workers/ConsoleLogVisitor.ts +8 -0
- package/src/visitors/workers/ThrowValidatorItemsVisitor.ts +42 -0
- package/src/visitors/workers/index.ts +2 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import type * as nodes from '../../nodes';
|
|
2
|
+
import { Visitor } from '../Visitor';
|
|
3
|
+
|
|
4
|
+
export class GetNodeTreeStringVisitor implements Visitor<string> {
|
|
5
|
+
indent = 0;
|
|
6
|
+
|
|
7
|
+
readonly separator: string;
|
|
8
|
+
|
|
9
|
+
constructor(separator = '| ') {
|
|
10
|
+
this.separator = separator;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
visitRoot(root: nodes.RootNode): string {
|
|
14
|
+
this.indent += 1;
|
|
15
|
+
const children = root.programs.map((program) => program.accept(this));
|
|
16
|
+
this.indent -= 1;
|
|
17
|
+
return [this.indented('[RootNode]'), ...children].join('\n');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
visitProgram(program: nodes.ProgramNode): string {
|
|
21
|
+
this.indent += 1;
|
|
22
|
+
const children = [
|
|
23
|
+
...program.accounts.map((account) => account.accept(this)),
|
|
24
|
+
...program.instructionsWithSubs.map((ix) => ix.accept(this)),
|
|
25
|
+
...program.definedTypes.map((type) => type.accept(this)),
|
|
26
|
+
...program.errors.map((type) => type.accept(this)),
|
|
27
|
+
];
|
|
28
|
+
this.indent -= 1;
|
|
29
|
+
const data = program.metadata;
|
|
30
|
+
const tags = [];
|
|
31
|
+
if (data.publicKey) tags.push(`publicKey: ${data.publicKey}`);
|
|
32
|
+
if (data.version) tags.push(`version: ${data.version}`);
|
|
33
|
+
if (data.origin) tags.push(`origin: ${data.origin}`);
|
|
34
|
+
const tagsStr = tags.length > 0 ? ` (${tags.join(', ')})` : '';
|
|
35
|
+
return [
|
|
36
|
+
this.indented(`[ProgramNode] ${data.name}${tagsStr}`),
|
|
37
|
+
...children,
|
|
38
|
+
].join('\n');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
visitAccount(account: nodes.AccountNode): string {
|
|
42
|
+
const children: string[] = [];
|
|
43
|
+
children.push(this.indented(`[AccountNode] ${account.name}`));
|
|
44
|
+
this.indent += 1;
|
|
45
|
+
if (account.metadata.size !== null) {
|
|
46
|
+
children.push(this.indented(`size: ${account.metadata.size}`));
|
|
47
|
+
}
|
|
48
|
+
if (account.metadata.seeds.length > 0) {
|
|
49
|
+
children.push(this.indented('seeds:'));
|
|
50
|
+
this.indent += 1;
|
|
51
|
+
children.push(
|
|
52
|
+
...account.metadata.seeds.map((seed) => {
|
|
53
|
+
if (seed.kind === 'programId') return this.indented('programId');
|
|
54
|
+
if (seed.kind === 'literal') return this.indented(`"${seed.value}"`);
|
|
55
|
+
this.indent += 1;
|
|
56
|
+
const type = seed.type.accept(this);
|
|
57
|
+
this.indent -= 1;
|
|
58
|
+
return [
|
|
59
|
+
this.indented(`${seed.name} (${seed.description})`),
|
|
60
|
+
type,
|
|
61
|
+
].join('\n');
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
this.indent -= 1;
|
|
65
|
+
}
|
|
66
|
+
children.push(account.type.accept(this));
|
|
67
|
+
this.indent -= 1;
|
|
68
|
+
return children.join('\n');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
visitInstruction(instruction: nodes.InstructionNode): string {
|
|
72
|
+
const children: string[] = [];
|
|
73
|
+
children.push(this.indented(`[InstructionNode] ${instruction.name}`));
|
|
74
|
+
this.indent += 1;
|
|
75
|
+
children.push(this.indented('accounts:'));
|
|
76
|
+
this.indent += 1;
|
|
77
|
+
children.push(
|
|
78
|
+
...instruction.accounts.map((account) => {
|
|
79
|
+
const tags = [];
|
|
80
|
+
if (account.isWritable) tags.push('writable');
|
|
81
|
+
if (account.isSigner) tags.push('signer');
|
|
82
|
+
if (account.isOptional) tags.push('optional');
|
|
83
|
+
if (account.defaultsTo.kind !== 'none')
|
|
84
|
+
tags.push(`defaults to ${account.defaultsTo.kind}`);
|
|
85
|
+
const tagsAsString = tags.length > 0 ? ` (${tags.join(', ')})` : '';
|
|
86
|
+
return this.indented(account.name + tagsAsString);
|
|
87
|
+
})
|
|
88
|
+
);
|
|
89
|
+
this.indent -= 1;
|
|
90
|
+
children.push(this.indented('arguments:'));
|
|
91
|
+
this.indent += 1;
|
|
92
|
+
children.push(instruction.args.accept(this));
|
|
93
|
+
this.indent -= 1;
|
|
94
|
+
this.indent -= 1;
|
|
95
|
+
return children.join('\n');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
visitDefinedType(definedType: nodes.DefinedTypeNode): string {
|
|
99
|
+
this.indent += 1;
|
|
100
|
+
const child = definedType.type.accept(this);
|
|
101
|
+
this.indent -= 1;
|
|
102
|
+
return [this.indented(`[DefinedTypeNode] ${definedType.name}`), child].join(
|
|
103
|
+
'\n'
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
visitError(error: nodes.ErrorNode): string {
|
|
108
|
+
return this.indented(
|
|
109
|
+
`[ErrorNode] ${error.name} (${error.code}): ${error.message}`
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
visitTypeArray(typeArray: nodes.TypeArrayNode): string {
|
|
114
|
+
this.indent += 1;
|
|
115
|
+
const child = typeArray.itemType.accept(this);
|
|
116
|
+
this.indent -= 1;
|
|
117
|
+
return [
|
|
118
|
+
this.indented(`[TypeArrayNode] Size: ${typeArray.size}`),
|
|
119
|
+
child,
|
|
120
|
+
].join('\n');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
visitTypeDefinedLink(typeDefinedLink: nodes.TypeDefinedLinkNode): string {
|
|
124
|
+
return this.indented(
|
|
125
|
+
`[TypeDefinedLinkNode] ${typeDefinedLink.definedType}`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
visitTypeEnum(typeEnum: nodes.TypeEnumNode): string {
|
|
130
|
+
this.indent += 1;
|
|
131
|
+
const children = typeEnum.variants.map((variant) => variant.accept(this));
|
|
132
|
+
this.indent -= 1;
|
|
133
|
+
return [
|
|
134
|
+
this.indented(
|
|
135
|
+
`[TypeEnumNode]${typeEnum.name ? ` ${typeEnum.name}` : ''}`
|
|
136
|
+
),
|
|
137
|
+
...children,
|
|
138
|
+
].join('\n');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
visitTypeEnumEmptyVariant(
|
|
142
|
+
typeEnumEmptyVariant: nodes.TypeEnumEmptyVariantNode
|
|
143
|
+
): string {
|
|
144
|
+
return this.indented(
|
|
145
|
+
`[TypeEnumEmptyVariantNode] ${typeEnumEmptyVariant.name}`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
visitTypeEnumStructVariant(
|
|
150
|
+
typeEnumStructVariant: nodes.TypeEnumStructVariantNode
|
|
151
|
+
): string {
|
|
152
|
+
this.indent += 1;
|
|
153
|
+
const child = typeEnumStructVariant.struct.accept(this);
|
|
154
|
+
this.indent -= 1;
|
|
155
|
+
return [
|
|
156
|
+
this.indented(
|
|
157
|
+
`[TypeEnumStructVariantNode] ${typeEnumStructVariant.name}`
|
|
158
|
+
),
|
|
159
|
+
child,
|
|
160
|
+
].join('\n');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
visitTypeEnumTupleVariant(
|
|
164
|
+
typeEnumTupleVariant: nodes.TypeEnumTupleVariantNode
|
|
165
|
+
): string {
|
|
166
|
+
this.indent += 1;
|
|
167
|
+
const child = typeEnumTupleVariant.tuple.accept(this);
|
|
168
|
+
this.indent -= 1;
|
|
169
|
+
return [
|
|
170
|
+
this.indented(`[TypeEnumTupleVariantNode] ${typeEnumTupleVariant.name}`),
|
|
171
|
+
child,
|
|
172
|
+
].join('\n');
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
visitTypeLeaf(typeLeaf: nodes.TypeLeafNode): string {
|
|
176
|
+
return this.indented(`[TypeLeafNode] ${typeLeaf.type}`);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
visitTypeLeafWrapper(typeLeafWrapper: nodes.TypeLeafWrapperNode): string {
|
|
180
|
+
this.indent += 1;
|
|
181
|
+
const child = typeLeafWrapper.leaf.accept(this);
|
|
182
|
+
this.indent -= 1;
|
|
183
|
+
return [
|
|
184
|
+
this.indented(`[TypeLeafWrapperNode] ${typeLeafWrapper.wrapper.kind}`),
|
|
185
|
+
child,
|
|
186
|
+
].join('\n');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
visitTypeMap(typeMap: nodes.TypeMapNode): string {
|
|
190
|
+
const result: string[] = [];
|
|
191
|
+
result.push(this.indented(`[TypeMapNode] ${typeMap.mapType}`));
|
|
192
|
+
this.indent += 1;
|
|
193
|
+
result.push(this.indented('keys:'));
|
|
194
|
+
this.indent += 1;
|
|
195
|
+
result.push(typeMap.keyType.accept(this));
|
|
196
|
+
this.indent -= 1;
|
|
197
|
+
result.push(this.indented('values:'));
|
|
198
|
+
this.indent += 1;
|
|
199
|
+
result.push(typeMap.valueType.accept(this));
|
|
200
|
+
this.indent -= 1;
|
|
201
|
+
this.indent -= 1;
|
|
202
|
+
return result.join('\n');
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
visitTypeOption(typeOption: nodes.TypeOptionNode): string {
|
|
206
|
+
this.indent += 1;
|
|
207
|
+
const child = typeOption.type.accept(this);
|
|
208
|
+
this.indent -= 1;
|
|
209
|
+
return [this.indented('[TypeOptionNode]'), child].join('\n');
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
visitTypeSet(typeSet: nodes.TypeSetNode): string {
|
|
213
|
+
this.indent += 1;
|
|
214
|
+
const child = typeSet.type.accept(this);
|
|
215
|
+
this.indent -= 1;
|
|
216
|
+
return [this.indented(`[TypeSetNode] ${typeSet.setType}`), child].join(
|
|
217
|
+
'\n'
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
visitTypeStruct(typeStruct: nodes.TypeStructNode): string {
|
|
222
|
+
this.indent += 1;
|
|
223
|
+
const children = typeStruct.fields.map((field) => field.accept(this));
|
|
224
|
+
this.indent -= 1;
|
|
225
|
+
return [
|
|
226
|
+
this.indented(`[TypeStructNode] ${typeStruct.name}`),
|
|
227
|
+
...children,
|
|
228
|
+
].join('\n');
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
visitTypeStructField(typeStructField: nodes.TypeStructFieldNode): string {
|
|
232
|
+
this.indent += 1;
|
|
233
|
+
const child = typeStructField.type.accept(this);
|
|
234
|
+
this.indent -= 1;
|
|
235
|
+
return [
|
|
236
|
+
this.indented(`[TypeStructFieldNode] ${typeStructField.name}`),
|
|
237
|
+
child,
|
|
238
|
+
].join('\n');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
visitTypeTuple(typeTuple: nodes.TypeTupleNode): string {
|
|
242
|
+
this.indent += 1;
|
|
243
|
+
const children = typeTuple.itemTypes.map((itemType) =>
|
|
244
|
+
itemType.accept(this)
|
|
245
|
+
);
|
|
246
|
+
this.indent -= 1;
|
|
247
|
+
return [this.indented('[TypeTupleNode]'), ...children].join('\n');
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
visitTypeVec(typeVec: nodes.TypeVecNode): string {
|
|
251
|
+
this.indent += 1;
|
|
252
|
+
const child = typeVec.itemType.accept(this);
|
|
253
|
+
this.indent -= 1;
|
|
254
|
+
return [this.indented('[TypeVecNode]'), child].join('\n');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
indented(text: string) {
|
|
258
|
+
return this.separator.repeat(this.indent) + text;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type * as nodes from '../../nodes';
|
|
2
|
+
import { InstructionNodeAccountDefaultsSeed } from '../../nodes';
|
|
3
|
+
import { BaseThrowVisitor } from '../BaseThrowVisitor';
|
|
4
|
+
|
|
5
|
+
export type ResolvedInstructionAccount = nodes.InstructionNodeAccount & {
|
|
6
|
+
position: number;
|
|
7
|
+
dependencyPosition: number;
|
|
8
|
+
dependsOn: string[];
|
|
9
|
+
resolvedIsSigner: boolean;
|
|
10
|
+
resolvedIsOptionalSigner: boolean;
|
|
11
|
+
resolvedIsOptional: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export class GetResolvedInstructionAccountsVisitor extends BaseThrowVisitor<
|
|
15
|
+
ResolvedInstructionAccount[]
|
|
16
|
+
> {
|
|
17
|
+
protected stack: string[] = [];
|
|
18
|
+
|
|
19
|
+
protected visited = new Map<string, ResolvedInstructionAccount>();
|
|
20
|
+
|
|
21
|
+
protected raw = new Map<string, [nodes.InstructionNodeAccount, number]>();
|
|
22
|
+
|
|
23
|
+
protected error: string | null = null;
|
|
24
|
+
|
|
25
|
+
getError(): string | null {
|
|
26
|
+
return this.error;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
visitInstruction(
|
|
30
|
+
instruction: nodes.InstructionNode
|
|
31
|
+
): ResolvedInstructionAccount[] {
|
|
32
|
+
// Ensure we always start with a clean slate.
|
|
33
|
+
this.error = null;
|
|
34
|
+
this.stack = [];
|
|
35
|
+
this.visited = new Map();
|
|
36
|
+
this.raw = instruction.accounts.reduce(
|
|
37
|
+
(map, account, index) => map.set(account.name, [account, index]),
|
|
38
|
+
new Map<string, [nodes.InstructionNodeAccount, number]>()
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// Visit all instruction accounts.
|
|
42
|
+
this.raw.forEach(([account, index]) => {
|
|
43
|
+
this.handleInstructionAccount(instruction, account, index);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
return [...this.visited.values()].sort((a, b) => a.position - b.position);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
handleInstructionAccount(
|
|
50
|
+
instruction: nodes.InstructionNode,
|
|
51
|
+
account: nodes.InstructionNodeAccount,
|
|
52
|
+
index: number
|
|
53
|
+
): void {
|
|
54
|
+
// Ensure we don't visit the same account twice.
|
|
55
|
+
if (this.visited.has(account.name)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Ensure we don't have a circular dependency.
|
|
60
|
+
if (this.stack.includes(account.name)) {
|
|
61
|
+
const cycle = [...this.stack, account.name].join(' -> ');
|
|
62
|
+
this.error =
|
|
63
|
+
`Circular dependency detected in the accounts of ` +
|
|
64
|
+
`the "${instruction.name}" instruction. ` +
|
|
65
|
+
`Got the following account dependency cycle: ${cycle}.`;
|
|
66
|
+
throw new Error(this.error);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Get account dependencies.
|
|
70
|
+
const dependsOn: string[] = [];
|
|
71
|
+
if (account.defaultsTo.kind === 'account') {
|
|
72
|
+
dependsOn.push(account.defaultsTo.name);
|
|
73
|
+
} else if (account.defaultsTo.kind === 'pda') {
|
|
74
|
+
type AccountSeed = Extract<
|
|
75
|
+
InstructionNodeAccountDefaultsSeed,
|
|
76
|
+
{ kind: 'account' }
|
|
77
|
+
>;
|
|
78
|
+
const accounts = Object.values(account.defaultsTo.seeds)
|
|
79
|
+
.filter((seed): seed is AccountSeed => seed.kind === 'account')
|
|
80
|
+
.map((seed) => seed.name);
|
|
81
|
+
dependsOn.push(...new Set(accounts));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Visit account dependencies first.
|
|
85
|
+
this.stack.push(account.name);
|
|
86
|
+
dependsOn.forEach((name) => {
|
|
87
|
+
const rawDependency = this.raw.get(name);
|
|
88
|
+
if (!rawDependency) {
|
|
89
|
+
this.error =
|
|
90
|
+
`Account "${name}" is not a valid dependency of account ` +
|
|
91
|
+
`"${account.name}" in the "${instruction.name}" instruction.`;
|
|
92
|
+
throw new Error(this.error);
|
|
93
|
+
}
|
|
94
|
+
const [dependency, dependencyIndex] = rawDependency;
|
|
95
|
+
this.handleInstructionAccount(instruction, dependency, dependencyIndex);
|
|
96
|
+
});
|
|
97
|
+
this.stack.pop();
|
|
98
|
+
|
|
99
|
+
const resolved: ResolvedInstructionAccount = {
|
|
100
|
+
...account,
|
|
101
|
+
position: index,
|
|
102
|
+
dependencyPosition: this.visited.size,
|
|
103
|
+
dependsOn,
|
|
104
|
+
resolvedIsSigner: account.isSigner,
|
|
105
|
+
resolvedIsOptionalSigner: account.isOptionalSigner,
|
|
106
|
+
resolvedIsOptional: account.isOptional,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
switch (resolved.defaultsTo.kind) {
|
|
110
|
+
case 'account':
|
|
111
|
+
const defaultAccount = this.visited.get(resolved.defaultsTo.name)!;
|
|
112
|
+
const resolvedIsPublicKey =
|
|
113
|
+
!account.isSigner && !defaultAccount.isSigner;
|
|
114
|
+
resolved.resolvedIsSigner = account.isSigner && defaultAccount.isSigner;
|
|
115
|
+
resolved.resolvedIsOptionalSigner =
|
|
116
|
+
!resolved.resolvedIsSigner && !resolvedIsPublicKey;
|
|
117
|
+
resolved.resolvedIsOptional = defaultAccount.isOptional;
|
|
118
|
+
break;
|
|
119
|
+
case 'publicKey':
|
|
120
|
+
case 'program':
|
|
121
|
+
case 'programId':
|
|
122
|
+
resolved.resolvedIsOptionalSigner = account.isSigner;
|
|
123
|
+
resolved.resolvedIsSigner = false;
|
|
124
|
+
resolved.resolvedIsOptional = false;
|
|
125
|
+
break;
|
|
126
|
+
case 'pda':
|
|
127
|
+
resolved.resolvedIsOptionalSigner = account.isSigner;
|
|
128
|
+
resolved.resolvedIsSigner = false;
|
|
129
|
+
resolved.resolvedIsOptional = false;
|
|
130
|
+
const { seeds } = resolved.defaultsTo;
|
|
131
|
+
Object.keys(seeds).forEach((seedKey) => {
|
|
132
|
+
const seed = seeds[seedKey];
|
|
133
|
+
if (seed.kind !== 'account') return;
|
|
134
|
+
const dependency = this.visited.get(seed.name)!;
|
|
135
|
+
if (dependency.resolvedIsOptional) {
|
|
136
|
+
this.error =
|
|
137
|
+
`Cannot use optional account "${seed.name}" as the "${seedKey}" PDA seed ` +
|
|
138
|
+
`for the "${account.name}" account of the "${instruction.name}" instruction.`;
|
|
139
|
+
throw new Error(this.error);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
case 'identity':
|
|
144
|
+
case 'payer':
|
|
145
|
+
resolved.resolvedIsOptional = false;
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
this.visited.set(account.name, resolved);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './GetByteSizeVisitor';
|
|
2
|
+
export * from './GetDefaultValidatorBagVisitor';
|
|
3
|
+
export * from './GetDefinedTypeHistogramVisitor';
|
|
4
|
+
export * from './GetNodeInlineStringVisitor';
|
|
5
|
+
export * from './GetNodeTreeStringVisitor';
|
|
6
|
+
export * from './GetResolvedInstructionAccountsVisitor';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './aggregators';
|
|
2
|
+
export * from './transformers';
|
|
3
|
+
export * from './workers';
|
|
4
|
+
|
|
5
|
+
export * from './BaseDelegateVisitor';
|
|
6
|
+
export * from './BaseNodeVisitor';
|
|
7
|
+
export * from './BaseThrowVisitor';
|
|
8
|
+
export * from './BaseVoidVisitor';
|
|
9
|
+
export * from './DefaultVisitor';
|
|
10
|
+
export * from './Dependency';
|
|
11
|
+
export * from './NodeSelector';
|
|
12
|
+
export * from './ValidatorBag';
|
|
13
|
+
export * from './NodeStack';
|
|
14
|
+
export * from './Visitable';
|
|
15
|
+
export * from './Visitor';
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
2
|
+
import { snakeCase } from '../../utils';
|
|
3
|
+
import * as nodes from '../../nodes';
|
|
4
|
+
import { BaseNodeVisitor } from '../BaseNodeVisitor';
|
|
5
|
+
|
|
6
|
+
export class AutoSetAnchorDiscriminatorsVisitor extends BaseNodeVisitor {
|
|
7
|
+
protected program: nodes.ProgramNode | null = null;
|
|
8
|
+
|
|
9
|
+
visitProgram(program: nodes.ProgramNode): nodes.Node {
|
|
10
|
+
this.program = program;
|
|
11
|
+
const visitedProgram = new nodes.ProgramNode(
|
|
12
|
+
program.metadata,
|
|
13
|
+
program.accounts
|
|
14
|
+
.map((account) => account.accept(this))
|
|
15
|
+
.filter(nodes.assertNodeFilter(nodes.assertAccountNode)),
|
|
16
|
+
program.instructions
|
|
17
|
+
.map((instruction) => instruction.accept(this))
|
|
18
|
+
.filter(nodes.assertNodeFilter(nodes.assertInstructionNode)),
|
|
19
|
+
program.definedTypes,
|
|
20
|
+
program.errors
|
|
21
|
+
);
|
|
22
|
+
this.program = null;
|
|
23
|
+
return visitedProgram;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
visitAccount(account: nodes.AccountNode): nodes.Node {
|
|
27
|
+
const shouldAddDiscriminator = this.program?.metadata.origin === 'anchor';
|
|
28
|
+
if (!shouldAddDiscriminator) return account;
|
|
29
|
+
|
|
30
|
+
const idlName = snakeCase(account.metadata.idlName);
|
|
31
|
+
const hash = sha256(`global:${idlName}`).slice(0, 8);
|
|
32
|
+
|
|
33
|
+
const discriminatorField = new nodes.TypeStructFieldNode(
|
|
34
|
+
{
|
|
35
|
+
name: 'discriminator',
|
|
36
|
+
docs: [],
|
|
37
|
+
defaultsTo: {
|
|
38
|
+
strategy: 'omitted',
|
|
39
|
+
value: getValueNodeFromBytes(hash),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
new nodes.TypeArrayNode(new nodes.TypeLeafNode('u8'), 8)
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
return new nodes.AccountNode(
|
|
46
|
+
{
|
|
47
|
+
...account.metadata,
|
|
48
|
+
discriminator: { kind: 'field', name: 'discriminator' },
|
|
49
|
+
},
|
|
50
|
+
new nodes.TypeStructNode(account.type.name, [
|
|
51
|
+
discriminatorField,
|
|
52
|
+
...account.type.fields,
|
|
53
|
+
])
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
visitInstruction(instruction: nodes.InstructionNode): nodes.Node {
|
|
58
|
+
const shouldAddDiscriminator = this.program?.metadata.origin === 'anchor';
|
|
59
|
+
if (!shouldAddDiscriminator) return instruction;
|
|
60
|
+
|
|
61
|
+
const idlName = snakeCase(instruction.metadata.idlName);
|
|
62
|
+
const hash = sha256(`global:${idlName}`).slice(0, 8);
|
|
63
|
+
|
|
64
|
+
const discriminatorField = new nodes.TypeStructFieldNode(
|
|
65
|
+
{
|
|
66
|
+
name: 'discriminator',
|
|
67
|
+
docs: [],
|
|
68
|
+
defaultsTo: {
|
|
69
|
+
strategy: 'omitted',
|
|
70
|
+
value: getValueNodeFromBytes(hash),
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
new nodes.TypeArrayNode(new nodes.TypeLeafNode('u8'), 8)
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
return new nodes.InstructionNode(
|
|
77
|
+
instruction.metadata,
|
|
78
|
+
instruction.accounts,
|
|
79
|
+
new nodes.TypeStructNode(instruction.args.name, [
|
|
80
|
+
discriminatorField,
|
|
81
|
+
...instruction.args.fields,
|
|
82
|
+
]),
|
|
83
|
+
instruction.subInstructions
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function getValueNodeFromBytes(bytes: Uint8Array): nodes.ListValueNode {
|
|
89
|
+
return nodes.vList([...bytes].map((byte) => nodes.vScalar(byte)));
|
|
90
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as nodes from '../../nodes';
|
|
2
|
+
import { GetByteSizeVisitor } from '../aggregators';
|
|
3
|
+
import { BaseThrowVisitor } from '../BaseThrowVisitor';
|
|
4
|
+
import { TransformNodesVisitor } from './TransformNodesVisitor';
|
|
5
|
+
|
|
6
|
+
export class AutoSetFixedAccountSizesVisitor extends BaseThrowVisitor<nodes.RootNode> {
|
|
7
|
+
visitRoot(root: nodes.RootNode): nodes.RootNode {
|
|
8
|
+
// Prepare the visitor that gets the byte size of a type.
|
|
9
|
+
const byteSizeVisitor = new GetByteSizeVisitor();
|
|
10
|
+
byteSizeVisitor.registerDefinedTypes(root.allDefinedTypes);
|
|
11
|
+
|
|
12
|
+
// Prepare the visitor that transforms account nodes.
|
|
13
|
+
const transformVisitor = new TransformNodesVisitor([
|
|
14
|
+
{
|
|
15
|
+
selector: (node) =>
|
|
16
|
+
nodes.isAccountNode(node) && node.metadata.size === null,
|
|
17
|
+
transformer: (node) => {
|
|
18
|
+
nodes.assertAccountNode(node);
|
|
19
|
+
const size = node.type.accept(byteSizeVisitor);
|
|
20
|
+
if (size === null) return node;
|
|
21
|
+
return new nodes.AccountNode({ ...node.metadata, size }, node.type);
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
]);
|
|
25
|
+
|
|
26
|
+
// Execute the transform visitor on the Root node.
|
|
27
|
+
const transformedRoot = root.accept(transformVisitor);
|
|
28
|
+
nodes.assertRootNode(transformedRoot);
|
|
29
|
+
return transformedRoot;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { mainCase } from '../../utils';
|
|
2
|
+
import { logWarn } from '../../logs';
|
|
3
|
+
import * as nodes from '../../nodes';
|
|
4
|
+
import { NodeTransform, TransformNodesVisitor } from './TransformNodesVisitor';
|
|
5
|
+
import { unwrapStruct } from './UnwrapStructVisitor';
|
|
6
|
+
|
|
7
|
+
export class CreateSubInstructionsFromEnumArgsVisitor extends TransformNodesVisitor {
|
|
8
|
+
protected allDefinedTypes = new Map<string, nodes.DefinedTypeNode>();
|
|
9
|
+
|
|
10
|
+
constructor(readonly map: Record<string, string>) {
|
|
11
|
+
const transforms = Object.entries(map).map(
|
|
12
|
+
([selector, argNameInput]): NodeTransform => {
|
|
13
|
+
const selectorStack = selector.split('.');
|
|
14
|
+
const name = selectorStack.pop();
|
|
15
|
+
return {
|
|
16
|
+
selector: { type: 'instruction', stack: selectorStack, name },
|
|
17
|
+
transformer: (node) => {
|
|
18
|
+
nodes.assertInstructionNode(node);
|
|
19
|
+
const argName = mainCase(argNameInput);
|
|
20
|
+
const argFieldIndex = node.args.fields.findIndex(
|
|
21
|
+
(field) => field.name === argName
|
|
22
|
+
);
|
|
23
|
+
const argField =
|
|
24
|
+
argFieldIndex >= 0 ? node.args.fields[argFieldIndex] : null;
|
|
25
|
+
if (!argField) {
|
|
26
|
+
logWarn(`Could not find instruction argument [${argName}].`);
|
|
27
|
+
return node;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let argType: nodes.TypeEnumNode;
|
|
31
|
+
if (nodes.isTypeEnumNode(argField.type)) {
|
|
32
|
+
argType = argField.type;
|
|
33
|
+
} else if (
|
|
34
|
+
nodes.isTypeDefinedLinkNode(argField.type) &&
|
|
35
|
+
this.allDefinedTypes.has(argField.type.name)
|
|
36
|
+
) {
|
|
37
|
+
const linkedType =
|
|
38
|
+
this.allDefinedTypes.get(argField.type.name)?.type ?? null;
|
|
39
|
+
nodes.assertTypeEnumNode(linkedType);
|
|
40
|
+
argType = linkedType;
|
|
41
|
+
} else {
|
|
42
|
+
logWarn(
|
|
43
|
+
`Could not find an enum type for ` +
|
|
44
|
+
`instruction argument [${argName}].`
|
|
45
|
+
);
|
|
46
|
+
return node;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const subInstructions = argType.variants.map(
|
|
50
|
+
(variant, index): nodes.InstructionNode => {
|
|
51
|
+
const subName = mainCase(`${node.name} ${variant.name}`);
|
|
52
|
+
const subFields = node.args.fields.slice(0, argFieldIndex);
|
|
53
|
+
subFields.push(
|
|
54
|
+
new nodes.TypeStructFieldNode(
|
|
55
|
+
{
|
|
56
|
+
name: `${subName}Discriminator`,
|
|
57
|
+
docs: [],
|
|
58
|
+
defaultsTo: {
|
|
59
|
+
strategy: 'omitted',
|
|
60
|
+
value: nodes.vScalar(index),
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
new nodes.TypeLeafNode('u8')
|
|
64
|
+
)
|
|
65
|
+
);
|
|
66
|
+
if (nodes.isTypeEnumStructVariantNode(variant)) {
|
|
67
|
+
subFields.push(
|
|
68
|
+
new nodes.TypeStructFieldNode(
|
|
69
|
+
argField.metadata,
|
|
70
|
+
variant.struct
|
|
71
|
+
)
|
|
72
|
+
);
|
|
73
|
+
} else if (nodes.isTypeEnumTupleVariantNode(variant)) {
|
|
74
|
+
subFields.push(
|
|
75
|
+
new nodes.TypeStructFieldNode(
|
|
76
|
+
argField.metadata,
|
|
77
|
+
variant.tuple
|
|
78
|
+
)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
subFields.push(...node.args.fields.slice(argFieldIndex + 1));
|
|
82
|
+
|
|
83
|
+
return new nodes.InstructionNode(
|
|
84
|
+
{ ...node.metadata, name: subName },
|
|
85
|
+
node.accounts,
|
|
86
|
+
unwrapStruct(
|
|
87
|
+
new nodes.TypeStructNode(
|
|
88
|
+
`${subName}InstructionArgs`,
|
|
89
|
+
subFields
|
|
90
|
+
)
|
|
91
|
+
),
|
|
92
|
+
[]
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
return new nodes.InstructionNode(
|
|
98
|
+
node.metadata,
|
|
99
|
+
node.accounts,
|
|
100
|
+
node.args,
|
|
101
|
+
[...node.subInstructions, ...subInstructions]
|
|
102
|
+
);
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
super(transforms);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
visitRoot(root: nodes.RootNode): nodes.Node | null {
|
|
112
|
+
root.allDefinedTypes.forEach((type) => {
|
|
113
|
+
this.allDefinedTypes.set(type.name, type);
|
|
114
|
+
});
|
|
115
|
+
return super.visitRoot(root);
|
|
116
|
+
}
|
|
117
|
+
}
|