@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,522 @@
|
|
|
1
|
+
import * as nodes from '../../nodes';
|
|
2
|
+
import { camelCase, pascalCase } from '../../utils';
|
|
3
|
+
import { Visitor } from '../../visitors';
|
|
4
|
+
import { JavaScriptImportMap } from './JavaScriptImportMap';
|
|
5
|
+
import { renderJavaScriptValueNode } from './RenderJavaScriptValueNode';
|
|
6
|
+
|
|
7
|
+
export type JavaScriptTypeManifest = {
|
|
8
|
+
strictType: string;
|
|
9
|
+
looseType: string;
|
|
10
|
+
hasLooseType: boolean;
|
|
11
|
+
isEnum: boolean;
|
|
12
|
+
serializer: string;
|
|
13
|
+
imports: JavaScriptImportMap;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export class GetJavaScriptTypeManifestVisitor
|
|
17
|
+
implements Visitor<JavaScriptTypeManifest>
|
|
18
|
+
{
|
|
19
|
+
private availableDefinedTypes = new Map<string, nodes.DefinedTypeNode>();
|
|
20
|
+
|
|
21
|
+
private visitedDefinedTypes = new Map<string, JavaScriptTypeManifest>();
|
|
22
|
+
|
|
23
|
+
private definedTypeStack: string[] = [];
|
|
24
|
+
|
|
25
|
+
private definedName: {
|
|
26
|
+
strict: string;
|
|
27
|
+
loose: string;
|
|
28
|
+
} | null = null;
|
|
29
|
+
|
|
30
|
+
constructor(readonly serializerVariable = 's') {}
|
|
31
|
+
|
|
32
|
+
registerDefinedTypes(definedTypes: nodes.DefinedTypeNode[]): void {
|
|
33
|
+
definedTypes.forEach((definedType) => {
|
|
34
|
+
this.availableDefinedTypes.set(definedType.name, definedType);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
visitRoot(): JavaScriptTypeManifest {
|
|
39
|
+
throw new Error(
|
|
40
|
+
'Cannot get type manifest for root node. Please select a child node.'
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
visitProgram(): JavaScriptTypeManifest {
|
|
45
|
+
throw new Error(
|
|
46
|
+
'Cannot get type manifest for program node. Please select a child node.'
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
visitAccount(account: nodes.AccountNode): JavaScriptTypeManifest {
|
|
51
|
+
this.definedName = {
|
|
52
|
+
strict: `${pascalCase(account.name)}AccountData`,
|
|
53
|
+
loose: `${pascalCase(account.name)}AccountArgs`,
|
|
54
|
+
};
|
|
55
|
+
const child = account.type.accept(this);
|
|
56
|
+
this.definedName = null;
|
|
57
|
+
return child;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
visitInstruction(instruction: nodes.InstructionNode): JavaScriptTypeManifest {
|
|
61
|
+
this.definedName = {
|
|
62
|
+
strict: `${pascalCase(instruction.name)}InstructionData`,
|
|
63
|
+
loose: `${pascalCase(instruction.name)}InstructionArgs`,
|
|
64
|
+
};
|
|
65
|
+
const child = instruction.args.accept(this);
|
|
66
|
+
this.definedName = null;
|
|
67
|
+
return child;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
visitDefinedType(definedType: nodes.DefinedTypeNode): JavaScriptTypeManifest {
|
|
71
|
+
if (this.visitedDefinedTypes.has(definedType.name)) {
|
|
72
|
+
return this.visitedDefinedTypes.get(definedType.name)!;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.definedTypeStack.push(definedType.name);
|
|
76
|
+
this.definedName = {
|
|
77
|
+
strict: pascalCase(definedType.name),
|
|
78
|
+
loose: `${pascalCase(definedType.name)}Args`,
|
|
79
|
+
};
|
|
80
|
+
const child = definedType.type.accept(this);
|
|
81
|
+
this.definedName = null;
|
|
82
|
+
this.definedTypeStack.pop();
|
|
83
|
+
this.visitedDefinedTypes.set(definedType.name, child);
|
|
84
|
+
return child;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
visitError(): JavaScriptTypeManifest {
|
|
88
|
+
throw new Error('Cannot get type manifest for error node.');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
visitTypeArray(typeArray: nodes.TypeArrayNode): JavaScriptTypeManifest {
|
|
92
|
+
const itemType = typeArray.itemType.accept(this);
|
|
93
|
+
return {
|
|
94
|
+
...itemType,
|
|
95
|
+
strictType: `Array<${itemType.strictType}>`,
|
|
96
|
+
looseType: `Array<${itemType.looseType}>`,
|
|
97
|
+
serializer: `${this.s('array')}(${itemType.serializer}, ${
|
|
98
|
+
typeArray.size
|
|
99
|
+
})`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
visitTypeDefinedLink(
|
|
104
|
+
typeDefinedLink: nodes.TypeDefinedLinkNode
|
|
105
|
+
): JavaScriptTypeManifest {
|
|
106
|
+
const linkedDefinedType = this.availableDefinedTypes.get(
|
|
107
|
+
typeDefinedLink.definedType
|
|
108
|
+
);
|
|
109
|
+
if (!linkedDefinedType) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
`Cannot find linked defined type ${typeDefinedLink.definedType}.`
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
let linkedDefinedTypeHasLooseType = false;
|
|
116
|
+
if (this.definedTypeStack.includes(linkedDefinedType.name)) {
|
|
117
|
+
// This prevents infinite recursion by using loose types
|
|
118
|
+
// for all types in a cyclic dependency.
|
|
119
|
+
linkedDefinedTypeHasLooseType = true;
|
|
120
|
+
} else {
|
|
121
|
+
const linkedManifest = linkedDefinedType.accept(this);
|
|
122
|
+
linkedDefinedTypeHasLooseType = linkedManifest.hasLooseType;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const pascalCaseDefinedType = pascalCase(typeDefinedLink.definedType);
|
|
126
|
+
const serializerName = `get${pascalCaseDefinedType}Serializer`;
|
|
127
|
+
const rawDependency =
|
|
128
|
+
typeDefinedLink.dependency ?? linkedDefinedType.metadata.importFrom;
|
|
129
|
+
const dependency =
|
|
130
|
+
rawDependency === 'generated' ? 'generatedTypes' : rawDependency;
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
strictType: pascalCaseDefinedType,
|
|
134
|
+
looseType: linkedDefinedTypeHasLooseType
|
|
135
|
+
? `${pascalCaseDefinedType}Args`
|
|
136
|
+
: pascalCaseDefinedType,
|
|
137
|
+
hasLooseType: linkedDefinedTypeHasLooseType,
|
|
138
|
+
isEnum: false,
|
|
139
|
+
serializer: `${serializerName}(context)`,
|
|
140
|
+
imports: new JavaScriptImportMap().add(dependency, [
|
|
141
|
+
serializerName,
|
|
142
|
+
pascalCaseDefinedType,
|
|
143
|
+
...(linkedDefinedTypeHasLooseType
|
|
144
|
+
? [`${pascalCaseDefinedType}Args`]
|
|
145
|
+
: []),
|
|
146
|
+
]),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
visitTypeEnum(typeEnum: nodes.TypeEnumNode): JavaScriptTypeManifest {
|
|
151
|
+
const variantNames = typeEnum.variants.map((variant) =>
|
|
152
|
+
pascalCase(variant.name)
|
|
153
|
+
);
|
|
154
|
+
const { definedName } = this;
|
|
155
|
+
this.definedName = null;
|
|
156
|
+
|
|
157
|
+
if (typeEnum.isScalarEnum()) {
|
|
158
|
+
if (definedName === null) {
|
|
159
|
+
throw new Error(
|
|
160
|
+
'Scalar enums cannot be inlined and must be introduced ' +
|
|
161
|
+
'via a defined type. Ensure you are not inlining a ' +
|
|
162
|
+
'defined type that is a scalar enum through a visitor.'
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
strictType: `{ ${variantNames.join(', ')} }`,
|
|
167
|
+
looseType: `{ ${variantNames.join(', ')} }`,
|
|
168
|
+
hasLooseType: false,
|
|
169
|
+
isEnum: true,
|
|
170
|
+
serializer:
|
|
171
|
+
`${this.s('enum')}<${definedName.strict}>` +
|
|
172
|
+
`(${definedName.strict}, '${definedName.strict}')`,
|
|
173
|
+
imports: new JavaScriptImportMap(),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const variants = typeEnum.variants.map(
|
|
178
|
+
(variant): JavaScriptTypeManifest => {
|
|
179
|
+
const variantName = pascalCase(variant.name);
|
|
180
|
+
this.definedName = definedName
|
|
181
|
+
? {
|
|
182
|
+
strict: `GetDataEnumKindContent<${definedName.strict}, '${variantName}'>`,
|
|
183
|
+
loose: `GetDataEnumKindContent<${definedName.loose}, '${variantName}'>`,
|
|
184
|
+
}
|
|
185
|
+
: null;
|
|
186
|
+
const variantManifest = variant.accept(this);
|
|
187
|
+
this.definedName = null;
|
|
188
|
+
return variantManifest;
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
const mergedManifest = this.mergeManifests(variants);
|
|
193
|
+
const variantSerializers = variants
|
|
194
|
+
.map((variant) => variant.serializer)
|
|
195
|
+
.join(', ');
|
|
196
|
+
const description = typeEnum.name || definedName?.strict;
|
|
197
|
+
const descriptionArgs = description
|
|
198
|
+
? `, undefined, '${pascalCase(description)}'`
|
|
199
|
+
: '';
|
|
200
|
+
const serializerTypeParams = definedName ? definedName.strict : 'any';
|
|
201
|
+
|
|
202
|
+
return {
|
|
203
|
+
...mergedManifest,
|
|
204
|
+
strictType: variants.map((v) => v.strictType).join(' | '),
|
|
205
|
+
looseType: variants.map((v) => v.looseType).join(' | '),
|
|
206
|
+
serializer:
|
|
207
|
+
`${this.s('dataEnum')}<${serializerTypeParams}>` +
|
|
208
|
+
`([${variantSerializers}]${descriptionArgs})`,
|
|
209
|
+
imports: mergedManifest.imports.add('core', [
|
|
210
|
+
'GetDataEnumKindContent',
|
|
211
|
+
'GetDataEnumKind',
|
|
212
|
+
]),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
visitTypeEnumEmptyVariant(
|
|
217
|
+
typeEnumEmptyVariant: nodes.TypeEnumEmptyVariantNode
|
|
218
|
+
): JavaScriptTypeManifest {
|
|
219
|
+
const name = pascalCase(typeEnumEmptyVariant.name);
|
|
220
|
+
const kindAttribute = `__kind: "${name}"`;
|
|
221
|
+
return {
|
|
222
|
+
strictType: `{ ${kindAttribute} }`,
|
|
223
|
+
looseType: `{ ${kindAttribute} }`,
|
|
224
|
+
hasLooseType: false,
|
|
225
|
+
isEnum: false,
|
|
226
|
+
serializer: `['${name}', ${this.s('unit')}]`,
|
|
227
|
+
imports: new JavaScriptImportMap(),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
visitTypeEnumStructVariant(
|
|
232
|
+
typeEnumStructVariant: nodes.TypeEnumStructVariantNode
|
|
233
|
+
): JavaScriptTypeManifest {
|
|
234
|
+
const name = pascalCase(typeEnumStructVariant.name);
|
|
235
|
+
const kindAttribute = `__kind: "${name}"`;
|
|
236
|
+
const type = typeEnumStructVariant.struct.accept(this);
|
|
237
|
+
return {
|
|
238
|
+
...type,
|
|
239
|
+
strictType: `{ ${kindAttribute},${type.strictType.slice(1, -1)}}`,
|
|
240
|
+
looseType: `{ ${kindAttribute},${type.looseType.slice(1, -1)}}`,
|
|
241
|
+
serializer: `['${name}', ${type.serializer}]`,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
visitTypeEnumTupleVariant(
|
|
246
|
+
typeEnumTupleVariant: nodes.TypeEnumTupleVariantNode
|
|
247
|
+
): JavaScriptTypeManifest {
|
|
248
|
+
const name = pascalCase(typeEnumTupleVariant.name);
|
|
249
|
+
const kindAttribute = `__kind: "${name}"`;
|
|
250
|
+
const struct = new nodes.TypeStructNode(name, [
|
|
251
|
+
new nodes.TypeStructFieldNode(
|
|
252
|
+
{ name: 'fields', docs: [], defaultsTo: null },
|
|
253
|
+
typeEnumTupleVariant.tuple
|
|
254
|
+
),
|
|
255
|
+
]);
|
|
256
|
+
const type = struct.accept(this);
|
|
257
|
+
return {
|
|
258
|
+
...type,
|
|
259
|
+
strictType: `{ ${kindAttribute},${type.strictType.slice(1, -1)}}`,
|
|
260
|
+
looseType: `{ ${kindAttribute},${type.looseType.slice(1, -1)}}`,
|
|
261
|
+
serializer: `['${name}', ${type.serializer}]`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
visitTypeLeaf(typeLeaf: nodes.TypeLeafNode): JavaScriptTypeManifest {
|
|
266
|
+
const base = (
|
|
267
|
+
strictType: string,
|
|
268
|
+
looseType?: string
|
|
269
|
+
): JavaScriptTypeManifest => ({
|
|
270
|
+
strictType,
|
|
271
|
+
looseType: looseType ?? strictType,
|
|
272
|
+
serializer: this.s(typeLeaf.type),
|
|
273
|
+
hasLooseType: !!looseType,
|
|
274
|
+
isEnum: false,
|
|
275
|
+
imports: new JavaScriptImportMap(),
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
switch (typeLeaf.type) {
|
|
279
|
+
case 'string':
|
|
280
|
+
return { ...base('string'), serializer: this.s('string()') };
|
|
281
|
+
case 'bytes':
|
|
282
|
+
return { ...base('Uint8Array') };
|
|
283
|
+
case 'publicKey':
|
|
284
|
+
return {
|
|
285
|
+
...base('PublicKey'),
|
|
286
|
+
imports: new JavaScriptImportMap().add('core', 'PublicKey'),
|
|
287
|
+
};
|
|
288
|
+
case 'bool':
|
|
289
|
+
return { ...base('boolean'), serializer: this.s('bool()') };
|
|
290
|
+
case 'u64':
|
|
291
|
+
case 'u128':
|
|
292
|
+
case 'i64':
|
|
293
|
+
case 'i128':
|
|
294
|
+
return { ...base('bigint', 'number | bigint') };
|
|
295
|
+
default:
|
|
296
|
+
return { ...base('number') };
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
visitTypeLeafWrapper(
|
|
301
|
+
typeLeafWrapper: nodes.TypeLeafWrapperNode
|
|
302
|
+
): JavaScriptTypeManifest {
|
|
303
|
+
const leaf = typeLeafWrapper.leaf.accept(this);
|
|
304
|
+
const { wrapper } = typeLeafWrapper;
|
|
305
|
+
switch (wrapper.kind) {
|
|
306
|
+
case 'DateTime':
|
|
307
|
+
if (!typeLeafWrapper.leaf.isInteger()) {
|
|
308
|
+
throw new Error(
|
|
309
|
+
`DateTime wrappers can only be applied to integer ` +
|
|
310
|
+
`types. Got type [${typeLeafWrapper.leaf.type}].`
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
...leaf,
|
|
315
|
+
imports: leaf.imports.add('core', [
|
|
316
|
+
'DateTime',
|
|
317
|
+
'DateTimeInput',
|
|
318
|
+
'mapDateTimeSerializer',
|
|
319
|
+
]),
|
|
320
|
+
strictType: `DateTime`,
|
|
321
|
+
looseType: `DateTimeInput`,
|
|
322
|
+
serializer: `mapDateTimeSerializer(${leaf.serializer})`,
|
|
323
|
+
};
|
|
324
|
+
case 'Amount':
|
|
325
|
+
case 'SolAmount':
|
|
326
|
+
if (!typeLeafWrapper.leaf.isUnsignedInteger()) {
|
|
327
|
+
throw new Error(
|
|
328
|
+
`Amount wrappers can only be applied to unsigned ` +
|
|
329
|
+
`integer types. Got type [${typeLeafWrapper.leaf.type}].`
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
const identifier =
|
|
333
|
+
wrapper.kind === 'SolAmount' ? 'SOL' : wrapper.identifier;
|
|
334
|
+
const decimals = wrapper.kind === 'SolAmount' ? 9 : wrapper.decimals;
|
|
335
|
+
const idAndDecimals = `'${identifier}', ${decimals}`;
|
|
336
|
+
const isSolAmount = identifier === 'SOL' && decimals === 9;
|
|
337
|
+
const amountType = isSolAmount
|
|
338
|
+
? 'SolAmount'
|
|
339
|
+
: `Amount<${idAndDecimals}>`;
|
|
340
|
+
return {
|
|
341
|
+
...leaf,
|
|
342
|
+
imports: leaf.imports.add('core', [
|
|
343
|
+
isSolAmount ? 'SolAmount' : 'Amount',
|
|
344
|
+
'mapAmountSerializer',
|
|
345
|
+
]),
|
|
346
|
+
strictType: amountType,
|
|
347
|
+
looseType: amountType,
|
|
348
|
+
serializer: `mapAmountSerializer(${leaf.serializer}, ${idAndDecimals})`,
|
|
349
|
+
};
|
|
350
|
+
default:
|
|
351
|
+
return leaf;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
visitTypeMap(typeMap: nodes.TypeMapNode): JavaScriptTypeManifest {
|
|
356
|
+
const key = typeMap.keyType.accept(this);
|
|
357
|
+
const value = typeMap.valueType.accept(this);
|
|
358
|
+
return {
|
|
359
|
+
...this.mergeManifests([key, value]),
|
|
360
|
+
strictType: `Map<${key.strictType}, ${value.strictType}>`,
|
|
361
|
+
looseType: `Map<${key.looseType}, ${value.looseType}>`,
|
|
362
|
+
serializer: `${this.s('map')}(${key.serializer}, ${value.serializer})`,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
visitTypeOption(typeOption: nodes.TypeOptionNode): JavaScriptTypeManifest {
|
|
367
|
+
const child = typeOption.type.accept(this);
|
|
368
|
+
const optionSerializer = this.s(
|
|
369
|
+
typeOption.optionType === 'coption' ? 'fixedOption' : 'option'
|
|
370
|
+
);
|
|
371
|
+
const prefixSerializer =
|
|
372
|
+
typeOption.optionType === 'coption' ? `, ${this.s('u32')}` : '';
|
|
373
|
+
return {
|
|
374
|
+
...child,
|
|
375
|
+
strictType: `Option<${child.strictType}>`,
|
|
376
|
+
looseType: `Option<${child.looseType}>`,
|
|
377
|
+
serializer: `${optionSerializer}(${child.serializer}${prefixSerializer})`,
|
|
378
|
+
imports: child.imports.add('core', 'Option'),
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
visitTypeSet(typeSet: nodes.TypeSetNode): JavaScriptTypeManifest {
|
|
383
|
+
const child = typeSet.type.accept(this);
|
|
384
|
+
return {
|
|
385
|
+
...child,
|
|
386
|
+
strictType: `Set<${child.strictType}>`,
|
|
387
|
+
looseType: `Set<${child.looseType}>`,
|
|
388
|
+
serializer: `${this.s('set')}(${child.serializer})`,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
visitTypeStruct(typeStruct: nodes.TypeStructNode): JavaScriptTypeManifest {
|
|
393
|
+
const { definedName } = this;
|
|
394
|
+
this.definedName = null;
|
|
395
|
+
|
|
396
|
+
const fields = typeStruct.fields.map((field) => field.accept(this));
|
|
397
|
+
const mergedManifest = this.mergeManifests(fields);
|
|
398
|
+
const fieldSerializers = fields.map((field) => field.serializer).join(', ');
|
|
399
|
+
const structDescription = typeStruct.name
|
|
400
|
+
? `, '${pascalCase(typeStruct.name)}'`
|
|
401
|
+
: '';
|
|
402
|
+
const serializerTypeParams = definedName ? definedName.strict : 'any';
|
|
403
|
+
const baseManifest = {
|
|
404
|
+
...mergedManifest,
|
|
405
|
+
strictType: `{ ${fields.map((field) => field.strictType).join('')} }`,
|
|
406
|
+
looseType: `{ ${fields.map((field) => field.looseType).join('')} }`,
|
|
407
|
+
serializer:
|
|
408
|
+
`${this.s('struct')}<${serializerTypeParams}>` +
|
|
409
|
+
`([${fieldSerializers}]${structDescription})`,
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
const optionalFields = typeStruct.fields.filter(
|
|
413
|
+
(f) => f.metadata.defaultsTo !== null
|
|
414
|
+
);
|
|
415
|
+
if (optionalFields.length === 0) {
|
|
416
|
+
return baseManifest;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
const defaultValues = optionalFields
|
|
420
|
+
.map((f) => {
|
|
421
|
+
const key = camelCase(f.name);
|
|
422
|
+
const defaultsTo = f.metadata.defaultsTo as NonNullable<
|
|
423
|
+
typeof f.metadata.defaultsTo
|
|
424
|
+
>;
|
|
425
|
+
const { render: renderedValue, imports } = renderJavaScriptValueNode(
|
|
426
|
+
defaultsTo.value,
|
|
427
|
+
this.availableDefinedTypes
|
|
428
|
+
);
|
|
429
|
+
baseManifest.imports.mergeWith(imports);
|
|
430
|
+
if (defaultsTo.strategy === 'omitted') {
|
|
431
|
+
return `${key}: ${renderedValue}`;
|
|
432
|
+
}
|
|
433
|
+
return `${key}: value.${key} ?? ${renderedValue}`;
|
|
434
|
+
})
|
|
435
|
+
.join(', ');
|
|
436
|
+
const mapSerializerTypeParams = definedName
|
|
437
|
+
? `${definedName.loose}, ${definedName.strict}, ${definedName.strict}`
|
|
438
|
+
: 'any, any, any';
|
|
439
|
+
const asReturnType = definedName ? ` as ${definedName.strict}` : '';
|
|
440
|
+
const mappedSerializer =
|
|
441
|
+
`mapSerializer<${mapSerializerTypeParams}>(` +
|
|
442
|
+
`${baseManifest.serializer}, ` +
|
|
443
|
+
`(value) => ({ ...value, ${defaultValues} }${asReturnType}) ` +
|
|
444
|
+
`)`;
|
|
445
|
+
|
|
446
|
+
return {
|
|
447
|
+
...baseManifest,
|
|
448
|
+
serializer: mappedSerializer,
|
|
449
|
+
imports: baseManifest.imports.add('core', 'mapSerializer'),
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
visitTypeStructField(
|
|
454
|
+
typeStructField: nodes.TypeStructFieldNode
|
|
455
|
+
): JavaScriptTypeManifest {
|
|
456
|
+
const { metadata } = typeStructField;
|
|
457
|
+
const name = camelCase(typeStructField.name);
|
|
458
|
+
const fieldType = typeStructField.type.accept(this);
|
|
459
|
+
const docblock = this.createDocblock(metadata.docs);
|
|
460
|
+
const baseField = {
|
|
461
|
+
...fieldType,
|
|
462
|
+
strictType: `${docblock}${name}: ${fieldType.strictType}; `,
|
|
463
|
+
looseType: `${docblock}${name}: ${fieldType.looseType}; `,
|
|
464
|
+
serializer: `['${name}', ${fieldType.serializer}]`,
|
|
465
|
+
};
|
|
466
|
+
if (metadata.defaultsTo === null) {
|
|
467
|
+
return baseField;
|
|
468
|
+
}
|
|
469
|
+
if (metadata.defaultsTo.strategy === 'optional') {
|
|
470
|
+
return {
|
|
471
|
+
...baseField,
|
|
472
|
+
hasLooseType: true,
|
|
473
|
+
looseType: `${docblock}${name}?: ${fieldType.looseType}; `,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
return { ...baseField, hasLooseType: true, looseType: '' };
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
visitTypeTuple(typeTuple: nodes.TypeTupleNode): JavaScriptTypeManifest {
|
|
480
|
+
const items = typeTuple.itemTypes.map((itemType) => itemType.accept(this));
|
|
481
|
+
const itemSerializers = items.map((item) => item.serializer).join(', ');
|
|
482
|
+
return {
|
|
483
|
+
...this.mergeManifests(items),
|
|
484
|
+
strictType: `[${items.map((item) => item.strictType).join(', ')}]`,
|
|
485
|
+
looseType: `[${items.map((item) => item.looseType).join(', ')}]`,
|
|
486
|
+
serializer: `${this.s('tuple')}([${itemSerializers}])`,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
visitTypeVec(typeVec: nodes.TypeVecNode): JavaScriptTypeManifest {
|
|
491
|
+
const itemType = typeVec.itemType.accept(this);
|
|
492
|
+
return {
|
|
493
|
+
...itemType,
|
|
494
|
+
strictType: `Array<${itemType.strictType}>`,
|
|
495
|
+
looseType: `Array<${itemType.looseType}>`,
|
|
496
|
+
serializer: `${this.s('vec')}(${itemType.serializer})`,
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
protected s(name: string): string {
|
|
501
|
+
return `${this.serializerVariable}.${name}`;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
protected mergeManifests(
|
|
505
|
+
manifests: JavaScriptTypeManifest[]
|
|
506
|
+
): Pick<JavaScriptTypeManifest, 'imports' | 'hasLooseType' | 'isEnum'> {
|
|
507
|
+
return {
|
|
508
|
+
imports: new JavaScriptImportMap().mergeWith(
|
|
509
|
+
...manifests.map((td) => td.imports)
|
|
510
|
+
),
|
|
511
|
+
hasLooseType: manifests.some((td) => td.hasLooseType),
|
|
512
|
+
isEnum: false,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
protected createDocblock(docs: string[]): string {
|
|
517
|
+
if (docs.length <= 0) return '';
|
|
518
|
+
if (docs.length === 1) return `\n/** ${docs[0]} */\n`;
|
|
519
|
+
const lines = docs.map((doc) => ` * ${doc}`);
|
|
520
|
+
return `\n/**\n${lines.join('\n')}\n */\n`;
|
|
521
|
+
}
|
|
522
|
+
}
|