@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,202 @@
|
|
|
1
|
+
import { camelCase, pascalCase, titleCase } from '../../utils';
|
|
2
|
+
import * as nodes from '../../nodes';
|
|
3
|
+
import {
|
|
4
|
+
GetDefaultValidatorBagVisitor,
|
|
5
|
+
NodeStack,
|
|
6
|
+
ValidatorBag,
|
|
7
|
+
} from '../../visitors';
|
|
8
|
+
|
|
9
|
+
export class GetJavaScriptValidatorBagVisitor extends GetDefaultValidatorBagVisitor {
|
|
10
|
+
protected exportMap: Map<
|
|
11
|
+
string,
|
|
12
|
+
{ node: nodes.Node; stack: NodeStack; exportType: string }
|
|
13
|
+
> = new Map();
|
|
14
|
+
|
|
15
|
+
visitRoot(root: nodes.RootNode): ValidatorBag {
|
|
16
|
+
return super.visitRoot(root);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
visitProgram(program: nodes.ProgramNode): ValidatorBag {
|
|
20
|
+
const bag = super.visitProgram(program);
|
|
21
|
+
this.pushNode(program);
|
|
22
|
+
const pascalCaseName = pascalCase(program.name);
|
|
23
|
+
bag.mergeWith([
|
|
24
|
+
this.checkExportConflicts(program, {
|
|
25
|
+
[`get${pascalCaseName}Program`]: 'function',
|
|
26
|
+
[`get${pascalCaseName}ErrorFromCode`]: 'function',
|
|
27
|
+
[`get${pascalCaseName}ErrorFromName`]: 'function',
|
|
28
|
+
}),
|
|
29
|
+
]);
|
|
30
|
+
this.popNode();
|
|
31
|
+
return bag;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
visitAccount(account: nodes.AccountNode): ValidatorBag {
|
|
35
|
+
const bag = super.visitAccount(account);
|
|
36
|
+
this.pushNode(account);
|
|
37
|
+
const exports = {
|
|
38
|
+
[account.name]: 'type',
|
|
39
|
+
[`${account.name}AccountData`]: 'type',
|
|
40
|
+
[`${account.name}AccountArgs`]: 'type',
|
|
41
|
+
[`fetch${account.name}`]: 'function',
|
|
42
|
+
[`safeFetch${account.name}`]: 'function',
|
|
43
|
+
[`deserialize${account.name}`]: 'function',
|
|
44
|
+
[`get${account.name}AccountDataSerializer`]: 'function',
|
|
45
|
+
[`get${account.name}Size`]: 'function',
|
|
46
|
+
};
|
|
47
|
+
if (account.metadata.seeds.length > 0) {
|
|
48
|
+
exports[`find${account.name}Pda`] = 'function';
|
|
49
|
+
}
|
|
50
|
+
bag.mergeWith([this.checkExportConflicts(account, exports)]);
|
|
51
|
+
const reservedAccountFields = new Set(['publicKey', 'header']);
|
|
52
|
+
const invalidFields = account.type.fields
|
|
53
|
+
.map((field) => field.name)
|
|
54
|
+
.filter((name) => reservedAccountFields.has(name));
|
|
55
|
+
if (invalidFields.length > 0) {
|
|
56
|
+
const x = invalidFields.join(', ');
|
|
57
|
+
const message =
|
|
58
|
+
invalidFields.length === 1
|
|
59
|
+
? `Account field [${x}] is reserved. Please rename it.`
|
|
60
|
+
: `Account fields [${x}] are reserved. Please rename them.`;
|
|
61
|
+
bag.error(message, account, this.stack);
|
|
62
|
+
}
|
|
63
|
+
this.popNode();
|
|
64
|
+
return bag;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
visitInstruction(instruction: nodes.InstructionNode): ValidatorBag {
|
|
68
|
+
const bag = super.visitInstruction(instruction);
|
|
69
|
+
this.pushNode(instruction);
|
|
70
|
+
bag.mergeWith([
|
|
71
|
+
this.checkExportConflicts(instruction, {
|
|
72
|
+
[camelCase(instruction.name)]: 'function',
|
|
73
|
+
[`${instruction.name}InstructionAccounts`]: 'type',
|
|
74
|
+
[`${instruction.name}InstructionData`]: 'type',
|
|
75
|
+
[`${instruction.name}InstructionArgs`]: 'type',
|
|
76
|
+
[`get${instruction.name}InstructionDataSerializer`]: 'function',
|
|
77
|
+
}),
|
|
78
|
+
]);
|
|
79
|
+
this.popNode();
|
|
80
|
+
return bag;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
visitDefinedType(definedType: nodes.DefinedTypeNode): ValidatorBag {
|
|
84
|
+
const bag = super.visitDefinedType(definedType);
|
|
85
|
+
this.pushNode(definedType);
|
|
86
|
+
const isDataEnum =
|
|
87
|
+
nodes.isTypeEnumNode(definedType.type) && definedType.type.isDataEnum();
|
|
88
|
+
bag.mergeWith([
|
|
89
|
+
this.checkExportConflicts(definedType, {
|
|
90
|
+
[definedType.name]: 'type',
|
|
91
|
+
[`${definedType.name}Args`]: 'type',
|
|
92
|
+
[`fetch${definedType.name}`]: 'function',
|
|
93
|
+
...(isDataEnum
|
|
94
|
+
? {
|
|
95
|
+
[camelCase(definedType.name)]: 'function',
|
|
96
|
+
[`is${definedType.name}`]: 'function',
|
|
97
|
+
}
|
|
98
|
+
: {}),
|
|
99
|
+
}),
|
|
100
|
+
]);
|
|
101
|
+
this.popNode();
|
|
102
|
+
return bag;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
visitError(error: nodes.ErrorNode): ValidatorBag {
|
|
106
|
+
const bag = super.visitError(error);
|
|
107
|
+
this.pushNode(error);
|
|
108
|
+
const prefixedName =
|
|
109
|
+
pascalCase(this.program?.metadata.prefix ?? '') +
|
|
110
|
+
pascalCase(error.metadata.name);
|
|
111
|
+
bag.mergeWith([
|
|
112
|
+
this.checkExportConflicts(error, {
|
|
113
|
+
[`${prefixedName}Error`]: 'class',
|
|
114
|
+
}),
|
|
115
|
+
]);
|
|
116
|
+
this.popNode();
|
|
117
|
+
return bag;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
visitTypeLeafWrapper(
|
|
121
|
+
typeLeafWrapper: nodes.TypeLeafWrapperNode
|
|
122
|
+
): ValidatorBag {
|
|
123
|
+
const bag = super.visitTypeLeafWrapper(typeLeafWrapper);
|
|
124
|
+
this.pushNode(typeLeafWrapper);
|
|
125
|
+
const { wrapper, leaf } = typeLeafWrapper;
|
|
126
|
+
switch (wrapper.kind) {
|
|
127
|
+
case 'DateTime':
|
|
128
|
+
if (!leaf.isInteger()) {
|
|
129
|
+
bag.error(
|
|
130
|
+
`DateTime wrapper can only be applied to ` +
|
|
131
|
+
`integer types. Got type [${leaf.type}].`,
|
|
132
|
+
typeLeafWrapper,
|
|
133
|
+
this.stack
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
case 'Amount':
|
|
138
|
+
if (!leaf.isUnsignedInteger()) {
|
|
139
|
+
bag.error(
|
|
140
|
+
`Amount wrapper can only be applied to ` +
|
|
141
|
+
`unsigned integer types. Got type [${leaf.type}].`,
|
|
142
|
+
typeLeafWrapper,
|
|
143
|
+
this.stack
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
this.popNode();
|
|
151
|
+
return bag;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
protected checkExportConflicts(
|
|
155
|
+
node: nodes.Node,
|
|
156
|
+
exports: Record<string, string>
|
|
157
|
+
): ValidatorBag {
|
|
158
|
+
const bag = new ValidatorBag();
|
|
159
|
+
const stack = this.stack.clone();
|
|
160
|
+
const conflictingNodes: nodes.Node[] = [];
|
|
161
|
+
Object.entries(exports).forEach(([exportName, exportType]) => {
|
|
162
|
+
// Checks for conflicts.
|
|
163
|
+
const exportConflict = this.exportMap.get(exportName);
|
|
164
|
+
if (!exportConflict) {
|
|
165
|
+
this.exportMap.set(exportName, { node, stack, exportType });
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Avoids throwing many similar error for the same kind of conflict.
|
|
170
|
+
const conflictingNode = exportConflict.node;
|
|
171
|
+
if (conflictingNodes.includes(conflictingNode)) return;
|
|
172
|
+
conflictingNodes.push(conflictingNode);
|
|
173
|
+
|
|
174
|
+
// Constructs the error message.
|
|
175
|
+
let exportDetails = '';
|
|
176
|
+
let conflictExportDetails = '';
|
|
177
|
+
if (!this.isEponymousExport(node, exportName)) {
|
|
178
|
+
exportDetails = `exports a "${exportName}" ${exportType} that `;
|
|
179
|
+
}
|
|
180
|
+
if (!this.isEponymousExport(conflictingNode, exportName)) {
|
|
181
|
+
conflictExportDetails = `"${exportName}" ${exportConflict.exportType} exported by the `;
|
|
182
|
+
}
|
|
183
|
+
const message =
|
|
184
|
+
`The ${this.getNodeTitle(node)} ${exportDetails}` +
|
|
185
|
+
`conflicts with the ${conflictExportDetails}` +
|
|
186
|
+
`${this.getNodeTitle(conflictingNode)}.\n` +
|
|
187
|
+
`|> Conflicting stack: ${exportConflict.stack}.`;
|
|
188
|
+
bag.error(message, node, stack);
|
|
189
|
+
});
|
|
190
|
+
return bag;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
protected isEponymousExport(node: nodes.Node, exportName: string): boolean {
|
|
194
|
+
return exportName === ('name' in node ? node.name : '');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
protected getNodeTitle(node: nodes.Node): string {
|
|
198
|
+
const name = 'name' in node ? node.name : '';
|
|
199
|
+
const type = titleCase(node.nodeClass.slice(0, -4)).toLowerCase();
|
|
200
|
+
return `"${name}" ${type}`;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Dependency } from '../../visitors';
|
|
2
|
+
|
|
3
|
+
const DEFAULT_MODULE_MAP: Record<string, string> = {
|
|
4
|
+
core: '@metaplex-foundation/umi-core',
|
|
5
|
+
types: '../types',
|
|
6
|
+
errors: '../errors',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export class JavaScriptImportMap {
|
|
10
|
+
protected readonly _imports: Map<Dependency, Set<string>> = new Map();
|
|
11
|
+
|
|
12
|
+
protected readonly _aliases: Map<Dependency, Record<string, string>> =
|
|
13
|
+
new Map();
|
|
14
|
+
|
|
15
|
+
add(
|
|
16
|
+
module: Dependency,
|
|
17
|
+
imports: string | string[] | Set<string>
|
|
18
|
+
): JavaScriptImportMap {
|
|
19
|
+
const currentImports = this._imports.get(module) ?? new Set();
|
|
20
|
+
const newImports = typeof imports === 'string' ? [imports] : imports;
|
|
21
|
+
newImports.forEach((i) => currentImports.add(i));
|
|
22
|
+
this._imports.set(module, currentImports);
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
remove(
|
|
27
|
+
module: Dependency,
|
|
28
|
+
imports: string | string[] | Set<string>
|
|
29
|
+
): JavaScriptImportMap {
|
|
30
|
+
const currentImports = this._imports.get(module) ?? new Set();
|
|
31
|
+
const importsToRemove = typeof imports === 'string' ? [imports] : imports;
|
|
32
|
+
importsToRemove.forEach((i) => currentImports.delete(i));
|
|
33
|
+
if (currentImports.size === 0) {
|
|
34
|
+
this._imports.delete(module);
|
|
35
|
+
} else {
|
|
36
|
+
this._imports.set(module, currentImports);
|
|
37
|
+
}
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
mergeWith(...others: JavaScriptImportMap[]): JavaScriptImportMap {
|
|
42
|
+
others.forEach((other) => {
|
|
43
|
+
other._imports.forEach((imports, module) => {
|
|
44
|
+
this.add(module, imports);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
addAlias(
|
|
51
|
+
module: Dependency,
|
|
52
|
+
name: string,
|
|
53
|
+
alias: string
|
|
54
|
+
): JavaScriptImportMap {
|
|
55
|
+
const currentAliases = this._aliases.get(module) ?? {};
|
|
56
|
+
currentAliases[name] = alias;
|
|
57
|
+
this._aliases.set(module, currentAliases);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
isEmpty(): boolean {
|
|
62
|
+
return this._imports.size === 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
toString(dependencies: Record<Dependency, string>): string {
|
|
66
|
+
const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };
|
|
67
|
+
const importStatements = [...this._imports.entries()]
|
|
68
|
+
.map(([module, imports]) => {
|
|
69
|
+
const mappedModule: string = dependencyMap[module] ?? module;
|
|
70
|
+
return [mappedModule, module, imports] as const;
|
|
71
|
+
})
|
|
72
|
+
.sort(([a], [b]) => {
|
|
73
|
+
const aIsRelative = a.startsWith('.');
|
|
74
|
+
const bIsRelative = b.startsWith('.');
|
|
75
|
+
if (aIsRelative && !bIsRelative) return 1;
|
|
76
|
+
if (!aIsRelative && bIsRelative) return -1;
|
|
77
|
+
return a.localeCompare(b);
|
|
78
|
+
})
|
|
79
|
+
.map(([mappedModule, module, imports]) => {
|
|
80
|
+
const aliasMap = this._aliases.get(module) ?? {};
|
|
81
|
+
const joinedImports = [...imports]
|
|
82
|
+
.sort()
|
|
83
|
+
.map((i) => (aliasMap[i] ? `${i} as ${aliasMap[i]}` : i))
|
|
84
|
+
.join(', ');
|
|
85
|
+
return `import { ${joinedImports} } from '${mappedModule}';`;
|
|
86
|
+
});
|
|
87
|
+
return importStatements.join('\n');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as nodes from '../../nodes';
|
|
2
|
+
import { camelCase, mainCase, pascalCase } from '../../utils';
|
|
3
|
+
import { JavaScriptImportMap } from './JavaScriptImportMap';
|
|
4
|
+
|
|
5
|
+
export function renderJavaScriptValueNode(
|
|
6
|
+
value: nodes.ValueNode,
|
|
7
|
+
types: Map<string, nodes.DefinedTypeNode>
|
|
8
|
+
): {
|
|
9
|
+
imports: JavaScriptImportMap;
|
|
10
|
+
render: string;
|
|
11
|
+
} {
|
|
12
|
+
const imports = new JavaScriptImportMap();
|
|
13
|
+
switch (value.__kind) {
|
|
14
|
+
case 'list':
|
|
15
|
+
case 'tuple':
|
|
16
|
+
const list = value.values.map((v) => renderJavaScriptValueNode(v, types));
|
|
17
|
+
return {
|
|
18
|
+
imports: imports.mergeWith(...list.map((c) => c.imports)),
|
|
19
|
+
render: `[${list.map((c) => c.render).join(', ')}]`,
|
|
20
|
+
};
|
|
21
|
+
case 'set':
|
|
22
|
+
const set = value.values.map((v) => renderJavaScriptValueNode(v, types));
|
|
23
|
+
return {
|
|
24
|
+
imports: imports.mergeWith(...set.map((c) => c.imports)),
|
|
25
|
+
render: `new Set([${set.map((c) => c.render).join(', ')}])`,
|
|
26
|
+
};
|
|
27
|
+
case 'map':
|
|
28
|
+
const map = value.values.map(([k, v]) => {
|
|
29
|
+
const mapKey = renderJavaScriptValueNode(k, types);
|
|
30
|
+
const mapValue = renderJavaScriptValueNode(v, types);
|
|
31
|
+
return {
|
|
32
|
+
imports: mapKey.imports.mergeWith(mapValue.imports),
|
|
33
|
+
render: `[${mapKey.render}, ${mapValue.render}]`,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
imports: imports.mergeWith(...map.map((c) => c.imports)),
|
|
38
|
+
render: `new Map([${map.map((c) => c.render).join(', ')}])`,
|
|
39
|
+
};
|
|
40
|
+
case 'struct':
|
|
41
|
+
const struct = Object.entries(value.values).map(([k, v]) => {
|
|
42
|
+
const structValue = renderJavaScriptValueNode(v, types);
|
|
43
|
+
return {
|
|
44
|
+
imports: structValue.imports,
|
|
45
|
+
render: `${k}: ${structValue.render}`,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
imports: imports.mergeWith(...struct.map((c) => c.imports)),
|
|
50
|
+
render: `{ ${struct.map((c) => c.render).join(', ')} }`,
|
|
51
|
+
};
|
|
52
|
+
case 'enum':
|
|
53
|
+
const definedType = types.get(mainCase(value.enumType));
|
|
54
|
+
if (!definedType || !nodes.isTypeEnumNode(definedType.type)) {
|
|
55
|
+
throw new Error(`Cannot find enum ${value.enumType}.`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const enumName = pascalCase(definedType.type.name);
|
|
59
|
+
const variantName = pascalCase(value.variant);
|
|
60
|
+
const rawDependency = value.dependency ?? definedType.metadata.importFrom;
|
|
61
|
+
const dependency =
|
|
62
|
+
rawDependency === 'generated' ? 'generatedTypes' : rawDependency;
|
|
63
|
+
|
|
64
|
+
if (definedType.type.isScalarEnum()) {
|
|
65
|
+
return {
|
|
66
|
+
imports: imports.add(dependency, enumName),
|
|
67
|
+
render: `${enumName}.${variantName}`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const enumFn = camelCase(definedType.type.name);
|
|
72
|
+
imports.add(dependency, enumFn);
|
|
73
|
+
|
|
74
|
+
if (!value.value) {
|
|
75
|
+
return { imports, render: `${enumFn}('${variantName}')` };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const enumValue = renderJavaScriptValueNode(value.value, types);
|
|
79
|
+
const fields = enumValue.render;
|
|
80
|
+
imports.mergeWith(enumValue.imports);
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
imports,
|
|
84
|
+
render: `${enumFn}('${variantName}', ${fields})`,
|
|
85
|
+
};
|
|
86
|
+
case 'optionSome':
|
|
87
|
+
const child = renderJavaScriptValueNode(value.value, types);
|
|
88
|
+
return {
|
|
89
|
+
imports: child.imports.add('core', 'some'),
|
|
90
|
+
render: `some(${child.render})`,
|
|
91
|
+
};
|
|
92
|
+
case 'optionNone':
|
|
93
|
+
return {
|
|
94
|
+
imports: new JavaScriptImportMap().add('core', 'none'),
|
|
95
|
+
render: 'none()',
|
|
96
|
+
};
|
|
97
|
+
case 'publicKey':
|
|
98
|
+
return {
|
|
99
|
+
imports: new JavaScriptImportMap().add('core', 'publicKey'),
|
|
100
|
+
render: `publicKey("${value.value}")`,
|
|
101
|
+
};
|
|
102
|
+
case 'string':
|
|
103
|
+
case 'number':
|
|
104
|
+
case 'boolean':
|
|
105
|
+
return { imports, render: JSON.stringify(value.value) };
|
|
106
|
+
default:
|
|
107
|
+
const neverDefault: never = value;
|
|
108
|
+
throw new Error(`Unexpected value type ${(neverDefault as any).__kind}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { LogLevel } from '../../logs';
|
|
2
|
+
import * as nodes from '../../nodes';
|
|
3
|
+
import { BaseThrowVisitor, ThrowValidatorItemsVisitor } from '../../visitors';
|
|
4
|
+
import { deleteFolder } from '../utils';
|
|
5
|
+
import { WriteRenderMapVisitor } from '../WriteRenderMapVisitor';
|
|
6
|
+
import {
|
|
7
|
+
GetJavaScriptRenderMapOptions,
|
|
8
|
+
GetJavaScriptRenderMapVisitor,
|
|
9
|
+
} from './GetJavaScriptRenderMapVisitor';
|
|
10
|
+
import { GetJavaScriptValidatorBagVisitor } from './GetJavaScriptValidatorBagVisitor';
|
|
11
|
+
|
|
12
|
+
export type RenderJavaScriptOptions = GetJavaScriptRenderMapOptions & {
|
|
13
|
+
deleteFolderBeforeRendering?: boolean;
|
|
14
|
+
throwLevel?: LogLevel;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export class RenderJavaScriptVisitor extends BaseThrowVisitor<void> {
|
|
18
|
+
constructor(
|
|
19
|
+
readonly path: string,
|
|
20
|
+
readonly options: RenderJavaScriptOptions = {}
|
|
21
|
+
) {
|
|
22
|
+
super();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
visitRoot(root: nodes.RootNode): void {
|
|
26
|
+
// Validate nodes.
|
|
27
|
+
root.accept(
|
|
28
|
+
new ThrowValidatorItemsVisitor(
|
|
29
|
+
new GetJavaScriptValidatorBagVisitor(),
|
|
30
|
+
this.options.throwLevel
|
|
31
|
+
)
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
// Delete existing generated folder.
|
|
35
|
+
if (this.options.deleteFolderBeforeRendering ?? true) {
|
|
36
|
+
deleteFolder(this.path);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Render the new files.
|
|
40
|
+
new WriteRenderMapVisitor(
|
|
41
|
+
new GetJavaScriptRenderMapVisitor(this.options),
|
|
42
|
+
this.path
|
|
43
|
+
).visitRoot(root);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './GetJavaScriptRenderMapVisitor';
|
|
2
|
+
export * from './GetJavaScriptTypeManifestVisitor';
|
|
3
|
+
export * from './GetJavaScriptValidatorBagVisitor';
|
|
4
|
+
export * from './RenderJavaScriptValueNode';
|
|
5
|
+
export * from './JavaScriptImportMap';
|
|
6
|
+
export * from './RenderJavaScriptVisitor';
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{% extends "layout.njk" %}
|
|
2
|
+
{% import "macros.njk" as macros %}
|
|
3
|
+
|
|
4
|
+
{% block main %}
|
|
5
|
+
{{ imports }}
|
|
6
|
+
|
|
7
|
+
{{ macros.docblock(definedType.docs) }}
|
|
8
|
+
export type {{ account.name | pascalCase }} = Account<{{ account.name | pascalCase }}AccountData>;
|
|
9
|
+
|
|
10
|
+
{{ macros.exportType(account.name | pascalCase + 'AccountData', account.name | pascalCase + 'AccountArgs', typeManifest) }}
|
|
11
|
+
|
|
12
|
+
export async function fetch{{ account.name | pascalCase }}(
|
|
13
|
+
context: Pick<Context, 'rpc' | 'serializer'>,
|
|
14
|
+
publicKey: PublicKey,
|
|
15
|
+
options?: RpcGetAccountOptions,
|
|
16
|
+
): Promise<{{ account.name | pascalCase }}> {
|
|
17
|
+
const maybeAccount = await context.rpc.getAccount(publicKey, options);
|
|
18
|
+
assertAccountExists(maybeAccount, '{{ account.name | pascalCase }}');
|
|
19
|
+
return deserialize{{ account.name | pascalCase }}(context, maybeAccount);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export async function safeFetch{{ account.name | pascalCase }}(
|
|
23
|
+
context: Pick<Context, 'rpc' | 'serializer'>,
|
|
24
|
+
publicKey: PublicKey,
|
|
25
|
+
options?: RpcGetAccountOptions,
|
|
26
|
+
): Promise<{{ account.name | pascalCase }} | null> {
|
|
27
|
+
const maybeAccount = await context.rpc.getAccount(publicKey, options);
|
|
28
|
+
return maybeAccount.exists
|
|
29
|
+
? deserialize{{ account.name | pascalCase }}(context, maybeAccount)
|
|
30
|
+
: null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export async function fetchAll{{ account.name | pascalCase }}(
|
|
34
|
+
context: Pick<Context, 'rpc' | 'serializer'>,
|
|
35
|
+
publicKeys: PublicKey[],
|
|
36
|
+
options?: RpcGetAccountsOptions,
|
|
37
|
+
): Promise<{{ account.name | pascalCase }}[]> {
|
|
38
|
+
const maybeAccounts = await context.rpc.getAccounts(publicKeys, options);
|
|
39
|
+
return maybeAccounts.map((maybeAccount) => {
|
|
40
|
+
assertAccountExists(maybeAccount, '{{ account.name | pascalCase }}');
|
|
41
|
+
return deserialize{{ account.name | pascalCase }}(context, maybeAccount);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export async function safeFetchAll{{ account.name | pascalCase }}(
|
|
46
|
+
context: Pick<Context, 'rpc' | 'serializer'>,
|
|
47
|
+
publicKeys: PublicKey[],
|
|
48
|
+
options?: RpcGetAccountsOptions,
|
|
49
|
+
): Promise<{{ account.name | pascalCase }}[]> {
|
|
50
|
+
const maybeAccounts = await context.rpc.getAccounts(publicKeys, options);
|
|
51
|
+
return maybeAccounts
|
|
52
|
+
.filter((maybeAccount) => maybeAccount.exists)
|
|
53
|
+
.map((maybeAccount) => deserialize{{ account.name | pascalCase }}(context, maybeAccount as RpcAccount));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function get{{ account.name | pascalCase }}GpaBuilder(context: Pick<Context, 'rpc' | 'serializer' | 'programs'>) {
|
|
57
|
+
const s = context.serializer;
|
|
58
|
+
const programId = context.programs.get('{{ program.name | camelCase }}').publicKey;
|
|
59
|
+
return gpaBuilder(context, programId)
|
|
60
|
+
.registerFields<{{ gpaFields.type }}>({{ gpaFields.serializers }})
|
|
61
|
+
.deserializeUsing<{{ account.name | pascalCase }}>((account) => deserialize{{ account.name | pascalCase }}(context, account))
|
|
62
|
+
{%- if account.metadata.discriminator.kind === 'field' and discriminatorValue %}
|
|
63
|
+
.whereField('{{ account.metadata.discriminator.name }}', {{ discriminatorValue }})
|
|
64
|
+
{% elif account.metadata.discriminator.kind === 'size' and account.metadata.size %}
|
|
65
|
+
.whereSize({{ account.metadata.size }})
|
|
66
|
+
{% endif -%}
|
|
67
|
+
;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function deserialize{{ account.name | pascalCase }}(
|
|
71
|
+
context: Pick<Context, 'serializer'>,
|
|
72
|
+
rawAccount: RpcAccount,
|
|
73
|
+
): {{ account.name | pascalCase }} {
|
|
74
|
+
return deserializeAccount(rawAccount, get{{ account.name | pascalCase }}AccountDataSerializer(context));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
{{ macros.exportSerializer(account.name | pascalCase + 'AccountData', account.name | pascalCase + 'AccountArgs', typeManifest) }}
|
|
78
|
+
|
|
79
|
+
{% if account.metadata.size !== null %}
|
|
80
|
+
export function get{{ account.name | pascalCase }}Size(_context = {}): number {
|
|
81
|
+
return {{ account.metadata.size }};
|
|
82
|
+
}
|
|
83
|
+
{% else %}
|
|
84
|
+
export function get{{ account.name | pascalCase }}Size(
|
|
85
|
+
context: Pick<Context, 'serializer'>
|
|
86
|
+
): number | null {
|
|
87
|
+
return get{{ account.name | pascalCase }}AccountDataSerializer(context).fixedSize;
|
|
88
|
+
}
|
|
89
|
+
{% endif %}
|
|
90
|
+
|
|
91
|
+
{% if seeds.length > 0 %}
|
|
92
|
+
export function find{{ account.name | pascalCase }}Pda(
|
|
93
|
+
context: Pick<Context, 'eddsa' | 'programs'{% if account.hasVariableSeeds %} | 'serializer'{% endif %}>,
|
|
94
|
+
{% if account.hasVariableSeeds %}
|
|
95
|
+
seeds: {
|
|
96
|
+
{% for seed in seeds %}
|
|
97
|
+
{% if seed.kind === 'variable' %}
|
|
98
|
+
/** {{ seed.description }} */
|
|
99
|
+
{{ seed.name | camelCase }}: {{ seed.typeManifest.looseType }};
|
|
100
|
+
{% endif %}
|
|
101
|
+
{% endfor %}
|
|
102
|
+
}
|
|
103
|
+
{% endif %}
|
|
104
|
+
): Pda {
|
|
105
|
+
{% if account.hasVariableSeeds %}
|
|
106
|
+
const s = context.serializer;
|
|
107
|
+
{% endif %}
|
|
108
|
+
const programId: PublicKey = context.programs.get('{{ program.metadata.name | camelCase }}').publicKey;
|
|
109
|
+
return context.eddsa.findPda(programId, [
|
|
110
|
+
{% for seed in seeds %}
|
|
111
|
+
{% if seed.kind === 'programId' %}
|
|
112
|
+
programId.bytes,
|
|
113
|
+
{% elif seed.kind === 'literal' %}
|
|
114
|
+
utf8.serialize("{{ seed.value }}"),
|
|
115
|
+
{% else %}
|
|
116
|
+
{{ seed.typeManifest.serializer }}.serialize(seeds.{{ seed.name | camelCase }}),
|
|
117
|
+
{% endif %}
|
|
118
|
+
{% endfor %}
|
|
119
|
+
]);
|
|
120
|
+
}
|
|
121
|
+
{% endif %}
|
|
122
|
+
{% endblock %}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{% extends "layout.njk" %}
|
|
2
|
+
{% import "macros.njk" as macros %}
|
|
3
|
+
|
|
4
|
+
{% block main %}
|
|
5
|
+
{{ imports }}
|
|
6
|
+
|
|
7
|
+
{{ macros.docblock(definedType.docs) }}
|
|
8
|
+
{{ macros.exportType(definedType.name | pascalCase, definedType.name | pascalCase + 'Args', typeManifest) }}
|
|
9
|
+
|
|
10
|
+
{{ macros.exportSerializer(definedType.name | pascalCase, definedType.name | pascalCase + 'Args', typeManifest) }}
|
|
11
|
+
|
|
12
|
+
{% include "definedTypesPageDataEnums.njk" %}
|
|
13
|
+
{% endblock %}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{% if definedType.type.nodeClass === 'TypeEnumNode' and definedType.type.isDataEnum() %}
|
|
2
|
+
{% set strictName = definedType.name | pascalCase %}
|
|
3
|
+
{% set looseName = definedType.name | pascalCase + 'Args' if typeManifest.hasLooseType else strictName %}
|
|
4
|
+
// Data Enum Helpers.
|
|
5
|
+
{% for variant in definedType.type.variants %}
|
|
6
|
+
{% if variant.nodeClass === 'TypeEnumStructVariantNode' %}
|
|
7
|
+
export function {{ definedType.name | camelCase }}(kind: '{{ variant.name | pascalCase }}', data: GetDataEnumKindContent<{{ looseName }}, '{{ variant.name | pascalCase }}'>): GetDataEnumKind<{{ looseName }}, '{{ variant.name | pascalCase }}'>;
|
|
8
|
+
{% elif variant.nodeClass === 'TypeEnumTupleVariantNode' %}
|
|
9
|
+
export function {{ definedType.name | camelCase }}(kind: '{{ variant.name | pascalCase }}', data: GetDataEnumKindContent<{{ looseName }}, '{{ variant.name | pascalCase }}'>['fields']): GetDataEnumKind<{{ looseName }}, '{{ variant.name | pascalCase }}'>;
|
|
10
|
+
{% else %}
|
|
11
|
+
export function {{ definedType.name | camelCase }}(kind: '{{ variant.name | pascalCase }}'): GetDataEnumKind<{{ looseName }}, '{{ variant.name | pascalCase }}'>;
|
|
12
|
+
{% endif %}
|
|
13
|
+
{% endfor %}
|
|
14
|
+
export function {{ definedType.name | camelCase }}<K extends {{ looseName }}['__kind']>(
|
|
15
|
+
kind: K,
|
|
16
|
+
data?: any,
|
|
17
|
+
): Extract<{{ looseName }}, { __kind: K }> {
|
|
18
|
+
return Array.isArray(data) ? { __kind: kind, fields: data } : { __kind: kind, ...(data ?? {}) };
|
|
19
|
+
}
|
|
20
|
+
export function is{{ strictName }}<K extends {{ strictName }}['__kind']>(
|
|
21
|
+
kind: K,
|
|
22
|
+
value: {{ strictName }},
|
|
23
|
+
): value is {{ strictName }} & { __kind: K } {
|
|
24
|
+
return value.__kind === kind;
|
|
25
|
+
};
|
|
26
|
+
{% endif %}
|