@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.
Files changed (416) hide show
  1. package/README.md +7 -0
  2. package/dist/cjs/Kinobi.js +28 -0
  3. package/dist/cjs/Kinobi.js.map +1 -0
  4. package/dist/cjs/idl/Idl.js +3 -0
  5. package/dist/cjs/idl/Idl.js.map +1 -0
  6. package/dist/cjs/idl/IdlAccount.js +3 -0
  7. package/dist/cjs/idl/IdlAccount.js.map +1 -0
  8. package/dist/cjs/idl/IdlDefinedType.js +3 -0
  9. package/dist/cjs/idl/IdlDefinedType.js.map +1 -0
  10. package/dist/cjs/idl/IdlError.js +3 -0
  11. package/dist/cjs/idl/IdlError.js.map +1 -0
  12. package/dist/cjs/idl/IdlInstruction.js +3 -0
  13. package/dist/cjs/idl/IdlInstruction.js.map +1 -0
  14. package/dist/cjs/idl/IdlType.js +3 -0
  15. package/dist/cjs/idl/IdlType.js.map +1 -0
  16. package/dist/cjs/idl/index.js +23 -0
  17. package/dist/cjs/idl/index.js.map +1 -0
  18. package/dist/cjs/index.js +22 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/logs.js +64 -0
  21. package/dist/cjs/logs.js.map +1 -0
  22. package/dist/cjs/nodes/AccountNode.js +89 -0
  23. package/dist/cjs/nodes/AccountNode.js.map +1 -0
  24. package/dist/cjs/nodes/DefinedTypeNode.js +43 -0
  25. package/dist/cjs/nodes/DefinedTypeNode.js.map +1 -0
  26. package/dist/cjs/nodes/ErrorNode.js +43 -0
  27. package/dist/cjs/nodes/ErrorNode.js.map +1 -0
  28. package/dist/cjs/nodes/InstructionNode.js +128 -0
  29. package/dist/cjs/nodes/InstructionNode.js.map +1 -0
  30. package/dist/cjs/nodes/Node.js +15 -0
  31. package/dist/cjs/nodes/Node.js.map +1 -0
  32. package/dist/cjs/nodes/ProgramNode.js +64 -0
  33. package/dist/cjs/nodes/ProgramNode.js.map +1 -0
  34. package/dist/cjs/nodes/RootNode.js +48 -0
  35. package/dist/cjs/nodes/RootNode.js.map +1 -0
  36. package/dist/cjs/nodes/TypeArrayNode.js +31 -0
  37. package/dist/cjs/nodes/TypeArrayNode.js.map +1 -0
  38. package/dist/cjs/nodes/TypeDefinedLinkNode.js +30 -0
  39. package/dist/cjs/nodes/TypeDefinedLinkNode.js.map +1 -0
  40. package/dist/cjs/nodes/TypeEnumEmptyVariantNode.js +30 -0
  41. package/dist/cjs/nodes/TypeEnumEmptyVariantNode.js.map +1 -0
  42. package/dist/cjs/nodes/TypeEnumNode.js +52 -0
  43. package/dist/cjs/nodes/TypeEnumNode.js.map +1 -0
  44. package/dist/cjs/nodes/TypeEnumStructVariantNode.js +37 -0
  45. package/dist/cjs/nodes/TypeEnumStructVariantNode.js.map +1 -0
  46. package/dist/cjs/nodes/TypeEnumTupleVariantNode.js +33 -0
  47. package/dist/cjs/nodes/TypeEnumTupleVariantNode.js.map +1 -0
  48. package/dist/cjs/nodes/TypeEnumVariantNode.js +20 -0
  49. package/dist/cjs/nodes/TypeEnumVariantNode.js.map +1 -0
  50. package/dist/cjs/nodes/TypeLeafNode.js +61 -0
  51. package/dist/cjs/nodes/TypeLeafNode.js.map +1 -0
  52. package/dist/cjs/nodes/TypeLeafWrapperNode.js +26 -0
  53. package/dist/cjs/nodes/TypeLeafWrapperNode.js.map +1 -0
  54. package/dist/cjs/nodes/TypeMapNode.js +35 -0
  55. package/dist/cjs/nodes/TypeMapNode.js.map +1 -0
  56. package/dist/cjs/nodes/TypeNode.js +103 -0
  57. package/dist/cjs/nodes/TypeNode.js.map +1 -0
  58. package/dist/cjs/nodes/TypeOptionNode.js +32 -0
  59. package/dist/cjs/nodes/TypeOptionNode.js.map +1 -0
  60. package/dist/cjs/nodes/TypeSetNode.js +32 -0
  61. package/dist/cjs/nodes/TypeSetNode.js.map +1 -0
  62. package/dist/cjs/nodes/TypeStructFieldNode.js +42 -0
  63. package/dist/cjs/nodes/TypeStructFieldNode.js.map +1 -0
  64. package/dist/cjs/nodes/TypeStructNode.js +32 -0
  65. package/dist/cjs/nodes/TypeStructNode.js.map +1 -0
  66. package/dist/cjs/nodes/TypeTupleNode.js +29 -0
  67. package/dist/cjs/nodes/TypeTupleNode.js.map +1 -0
  68. package/dist/cjs/nodes/TypeVecNode.js +29 -0
  69. package/dist/cjs/nodes/TypeVecNode.js.map +1 -0
  70. package/dist/cjs/nodes/ValueNode.js +57 -0
  71. package/dist/cjs/nodes/ValueNode.js.map +1 -0
  72. package/dist/cjs/nodes/index.js +42 -0
  73. package/dist/cjs/nodes/index.js.map +1 -0
  74. package/dist/cjs/renderers/RenderMap.js +35 -0
  75. package/dist/cjs/renderers/RenderMap.js.map +1 -0
  76. package/dist/cjs/renderers/WriteRenderMapVisitor.js +16 -0
  77. package/dist/cjs/renderers/WriteRenderMapVisitor.js.map +1 -0
  78. package/dist/cjs/renderers/index.js +21 -0
  79. package/dist/cjs/renderers/index.js.map +1 -0
  80. package/dist/cjs/renderers/js/GetJavaScriptRenderMapVisitor.js +360 -0
  81. package/dist/cjs/renderers/js/GetJavaScriptRenderMapVisitor.js.map +1 -0
  82. package/dist/cjs/renderers/js/GetJavaScriptTypeManifestVisitor.js +439 -0
  83. package/dist/cjs/renderers/js/GetJavaScriptTypeManifestVisitor.js.map +1 -0
  84. package/dist/cjs/renderers/js/GetJavaScriptValidatorBagVisitor.js +198 -0
  85. package/dist/cjs/renderers/js/GetJavaScriptValidatorBagVisitor.js.map +1 -0
  86. package/dist/cjs/renderers/js/JavaScriptImportMap.js +83 -0
  87. package/dist/cjs/renderers/js/JavaScriptImportMap.js.map +1 -0
  88. package/dist/cjs/renderers/js/RenderJavaScriptValueNode.js +125 -0
  89. package/dist/cjs/renderers/js/RenderJavaScriptValueNode.js.map +1 -0
  90. package/dist/cjs/renderers/js/RenderJavaScriptVisitor.js +28 -0
  91. package/dist/cjs/renderers/js/RenderJavaScriptVisitor.js.map +1 -0
  92. package/dist/cjs/renderers/js/index.js +23 -0
  93. package/dist/cjs/renderers/js/index.js.map +1 -0
  94. package/dist/cjs/renderers/js/templates/accountsIndex.njk +9 -0
  95. package/dist/cjs/renderers/js/templates/accountsPage.njk +122 -0
  96. package/dist/cjs/renderers/js/templates/definedTypesIndex.njk +9 -0
  97. package/dist/cjs/renderers/js/templates/definedTypesPage.njk +13 -0
  98. package/dist/cjs/renderers/js/templates/definedTypesPageDataEnums.njk +26 -0
  99. package/dist/cjs/renderers/js/templates/errorsIndex.njk +9 -0
  100. package/dist/cjs/renderers/js/templates/errorsPage.njk +43 -0
  101. package/dist/cjs/renderers/js/templates/instructionsIndex.njk +9 -0
  102. package/dist/cjs/renderers/js/templates/instructionsPage.njk +71 -0
  103. package/dist/cjs/renderers/js/templates/instructionsPageAccountMetas.njk +61 -0
  104. package/dist/cjs/renderers/js/templates/instructionsPageAccounts.njk +12 -0
  105. package/dist/cjs/renderers/js/templates/instructionsPageArgs.njk +7 -0
  106. package/dist/cjs/renderers/js/templates/layout.njk +9 -0
  107. package/dist/cjs/renderers/js/templates/macros.njk +40 -0
  108. package/dist/cjs/renderers/js/templates/programsIndex.njk +9 -0
  109. package/dist/cjs/renderers/js/templates/programsPage.njk +23 -0
  110. package/dist/cjs/renderers/js/templates/rootIndex.njk +23 -0
  111. package/dist/cjs/renderers/utils.js +42 -0
  112. package/dist/cjs/renderers/utils.js.map +1 -0
  113. package/dist/cjs/utils.js +47 -0
  114. package/dist/cjs/utils.js.map +1 -0
  115. package/dist/cjs/visitors/BaseDelegateVisitor.js +73 -0
  116. package/dist/cjs/visitors/BaseDelegateVisitor.js.map +1 -0
  117. package/dist/cjs/visitors/BaseNodeOrNullVisitor.js +183 -0
  118. package/dist/cjs/visitors/BaseNodeOrNullVisitor.js.map +1 -0
  119. package/dist/cjs/visitors/BaseNodeVisitor.js +144 -0
  120. package/dist/cjs/visitors/BaseNodeVisitor.js.map +1 -0
  121. package/dist/cjs/visitors/BaseThrowVisitor.js +70 -0
  122. package/dist/cjs/visitors/BaseThrowVisitor.js.map +1 -0
  123. package/dist/cjs/visitors/BaseVoidVisitor.js +81 -0
  124. package/dist/cjs/visitors/BaseVoidVisitor.js.map +1 -0
  125. package/dist/cjs/visitors/DefaultVisitor.js +53 -0
  126. package/dist/cjs/visitors/DefaultVisitor.js.map +1 -0
  127. package/dist/cjs/visitors/Dependency.js +3 -0
  128. package/dist/cjs/visitors/Dependency.js.map +1 -0
  129. package/dist/cjs/visitors/NodeSelector.js +79 -0
  130. package/dist/cjs/visitors/NodeSelector.js.map +1 -0
  131. package/dist/cjs/visitors/NodeStack.js +98 -0
  132. package/dist/cjs/visitors/NodeStack.js.map +1 -0
  133. package/dist/cjs/visitors/ValidatorBag.js +64 -0
  134. package/dist/cjs/visitors/ValidatorBag.js.map +1 -0
  135. package/dist/cjs/visitors/Visitable.js +3 -0
  136. package/dist/cjs/visitors/Visitable.js.map +1 -0
  137. package/dist/cjs/visitors/Visitor.js +3 -0
  138. package/dist/cjs/visitors/Visitor.js.map +1 -0
  139. package/dist/cjs/visitors/aggregators/GetByteSizeVisitor.js +130 -0
  140. package/dist/cjs/visitors/aggregators/GetByteSizeVisitor.js.map +1 -0
  141. package/dist/cjs/visitors/aggregators/GetDefaultValidatorBagVisitor.js +300 -0
  142. package/dist/cjs/visitors/aggregators/GetDefaultValidatorBagVisitor.js.map +1 -0
  143. package/dist/cjs/visitors/aggregators/GetDefinedTypeHistogramVisitor.js +157 -0
  144. package/dist/cjs/visitors/aggregators/GetDefinedTypeHistogramVisitor.js.map +1 -0
  145. package/dist/cjs/visitors/aggregators/GetNodeInlineStringVisitor.js +111 -0
  146. package/dist/cjs/visitors/aggregators/GetNodeInlineStringVisitor.js.map +1 -0
  147. package/dist/cjs/visitors/aggregators/GetNodeTreeStringVisitor.js +219 -0
  148. package/dist/cjs/visitors/aggregators/GetNodeTreeStringVisitor.js.map +1 -0
  149. package/dist/cjs/visitors/aggregators/GetResolvedInstructionAccountsVisitor.js +121 -0
  150. package/dist/cjs/visitors/aggregators/GetResolvedInstructionAccountsVisitor.js.map +1 -0
  151. package/dist/cjs/visitors/aggregators/index.js +23 -0
  152. package/dist/cjs/visitors/aggregators/index.js.map +1 -0
  153. package/dist/cjs/visitors/index.js +31 -0
  154. package/dist/cjs/visitors/index.js.map +1 -0
  155. package/dist/cjs/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.js +94 -0
  156. package/dist/cjs/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.js.map +1 -0
  157. package/dist/cjs/visitors/transformers/AutoSetFixedAccountSizesVisitor.js +56 -0
  158. package/dist/cjs/visitors/transformers/AutoSetFixedAccountSizesVisitor.js.map +1 -0
  159. package/dist/cjs/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.js +100 -0
  160. package/dist/cjs/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.js.map +1 -0
  161. package/dist/cjs/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.js +83 -0
  162. package/dist/cjs/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.js.map +1 -0
  163. package/dist/cjs/visitors/transformers/DeleteNodesVisitor.js +14 -0
  164. package/dist/cjs/visitors/transformers/DeleteNodesVisitor.js.map +1 -0
  165. package/dist/cjs/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.js +62 -0
  166. package/dist/cjs/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.js.map +1 -0
  167. package/dist/cjs/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.js +202 -0
  168. package/dist/cjs/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.js.map +1 -0
  169. package/dist/cjs/visitors/transformers/SetInstructionDiscriminatorsVisitor.js +59 -0
  170. package/dist/cjs/visitors/transformers/SetInstructionDiscriminatorsVisitor.js.map +1 -0
  171. package/dist/cjs/visitors/transformers/SetLeafWrappersVisitor.js +43 -0
  172. package/dist/cjs/visitors/transformers/SetLeafWrappersVisitor.js.map +1 -0
  173. package/dist/cjs/visitors/transformers/SetMissingDefinedTypesVisitor.js +85 -0
  174. package/dist/cjs/visitors/transformers/SetMissingDefinedTypesVisitor.js.map +1 -0
  175. package/dist/cjs/visitors/transformers/SetStructDefaultValuesVisitor.js +62 -0
  176. package/dist/cjs/visitors/transformers/SetStructDefaultValuesVisitor.js.map +1 -0
  177. package/dist/cjs/visitors/transformers/TransformNodesVisitor.js +156 -0
  178. package/dist/cjs/visitors/transformers/TransformNodesVisitor.js.map +1 -0
  179. package/dist/cjs/visitors/transformers/TransformU8ArraysToBytesVisitor.js +49 -0
  180. package/dist/cjs/visitors/transformers/TransformU8ArraysToBytesVisitor.js.map +1 -0
  181. package/dist/cjs/visitors/transformers/UnwrapDefinedTypesVisitor.js +69 -0
  182. package/dist/cjs/visitors/transformers/UnwrapDefinedTypesVisitor.js.map +1 -0
  183. package/dist/cjs/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.js +59 -0
  184. package/dist/cjs/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.js.map +1 -0
  185. package/dist/cjs/visitors/transformers/UnwrapInstructionArgsStructVisitor.js +44 -0
  186. package/dist/cjs/visitors/transformers/UnwrapInstructionArgsStructVisitor.js.map +1 -0
  187. package/dist/cjs/visitors/transformers/UnwrapStructVisitor.js +74 -0
  188. package/dist/cjs/visitors/transformers/UnwrapStructVisitor.js.map +1 -0
  189. package/dist/cjs/visitors/transformers/UpdateAccountsVisitor.js +57 -0
  190. package/dist/cjs/visitors/transformers/UpdateAccountsVisitor.js.map +1 -0
  191. package/dist/cjs/visitors/transformers/UpdateDefinedTypesVisitor.js +72 -0
  192. package/dist/cjs/visitors/transformers/UpdateDefinedTypesVisitor.js.map +1 -0
  193. package/dist/cjs/visitors/transformers/UpdateErrorsVisitor.js +50 -0
  194. package/dist/cjs/visitors/transformers/UpdateErrorsVisitor.js.map +1 -0
  195. package/dist/cjs/visitors/transformers/UpdateInstructionsVisitor.js +97 -0
  196. package/dist/cjs/visitors/transformers/UpdateInstructionsVisitor.js.map +1 -0
  197. package/dist/cjs/visitors/transformers/UpdateProgramsVisitor.js +49 -0
  198. package/dist/cjs/visitors/transformers/UpdateProgramsVisitor.js.map +1 -0
  199. package/dist/cjs/visitors/transformers/_renameHelpers.js +49 -0
  200. package/dist/cjs/visitors/transformers/_renameHelpers.js.map +1 -0
  201. package/dist/cjs/visitors/transformers/index.js +39 -0
  202. package/dist/cjs/visitors/transformers/index.js.map +1 -0
  203. package/dist/cjs/visitors/workers/ConsoleLogVisitor.js +12 -0
  204. package/dist/cjs/visitors/workers/ConsoleLogVisitor.js.map +1 -0
  205. package/dist/cjs/visitors/workers/ThrowValidatorItemsVisitor.js +38 -0
  206. package/dist/cjs/visitors/workers/ThrowValidatorItemsVisitor.js.map +1 -0
  207. package/dist/cjs/visitors/workers/index.js +19 -0
  208. package/dist/cjs/visitors/workers/index.js.map +1 -0
  209. package/dist/types/Kinobi.d.ts +9 -0
  210. package/dist/types/idl/Idl.d.ts +18 -0
  211. package/dist/types/idl/IdlAccount.d.ts +19 -0
  212. package/dist/types/idl/IdlDefinedType.d.ts +6 -0
  213. package/dist/types/idl/IdlError.d.ts +6 -0
  214. package/dist/types/idl/IdlInstruction.d.ts +25 -0
  215. package/dist/types/idl/IdlType.d.ts +60 -0
  216. package/dist/types/idl/index.d.ts +6 -0
  217. package/dist/types/index.d.ts +5 -0
  218. package/dist/types/logs.d.ts +9 -0
  219. package/dist/types/nodes/AccountNode.d.ts +51 -0
  220. package/dist/types/nodes/DefinedTypeNode.d.ts +24 -0
  221. package/dist/types/nodes/ErrorNode.d.ts +21 -0
  222. package/dist/types/nodes/InstructionNode.d.ts +88 -0
  223. package/dist/types/nodes/Node.d.ts +12 -0
  224. package/dist/types/nodes/ProgramNode.d.ts +31 -0
  225. package/dist/types/nodes/RootNode.d.ts +23 -0
  226. package/dist/types/nodes/TypeArrayNode.d.ts +14 -0
  227. package/dist/types/nodes/TypeDefinedLinkNode.d.ts +12 -0
  228. package/dist/types/nodes/TypeEnumEmptyVariantNode.d.ts +12 -0
  229. package/dist/types/nodes/TypeEnumNode.d.ts +16 -0
  230. package/dist/types/nodes/TypeEnumStructVariantNode.d.ts +14 -0
  231. package/dist/types/nodes/TypeEnumTupleVariantNode.d.ts +14 -0
  232. package/dist/types/nodes/TypeEnumVariantNode.d.ts +7 -0
  233. package/dist/types/nodes/TypeLeafNode.d.ts +18 -0
  234. package/dist/types/nodes/TypeLeafWrapperNode.d.ts +21 -0
  235. package/dist/types/nodes/TypeMapNode.d.ts +15 -0
  236. package/dist/types/nodes/TypeNode.d.ts +19 -0
  237. package/dist/types/nodes/TypeOptionNode.d.ts +14 -0
  238. package/dist/types/nodes/TypeSetNode.d.ts +14 -0
  239. package/dist/types/nodes/TypeStructFieldNode.d.ts +24 -0
  240. package/dist/types/nodes/TypeStructNode.d.ts +14 -0
  241. package/dist/types/nodes/TypeTupleNode.d.ts +13 -0
  242. package/dist/types/nodes/TypeVecNode.d.ts +13 -0
  243. package/dist/types/nodes/ValueNode.d.ts +59 -0
  244. package/dist/types/nodes/index.d.ts +25 -0
  245. package/dist/types/renderers/RenderMap.d.ts +8 -0
  246. package/dist/types/renderers/WriteRenderMapVisitor.d.ts +8 -0
  247. package/dist/types/renderers/index.d.ts +4 -0
  248. package/dist/types/renderers/js/GetJavaScriptRenderMapVisitor.d.ts +34 -0
  249. package/dist/types/renderers/js/GetJavaScriptTypeManifestVisitor.d.ts +44 -0
  250. package/dist/types/renderers/js/GetJavaScriptValidatorBagVisitor.d.ts +19 -0
  251. package/dist/types/renderers/js/JavaScriptImportMap.d.ts +11 -0
  252. package/dist/types/renderers/js/RenderJavaScriptValueNode.d.ts +6 -0
  253. package/dist/types/renderers/js/RenderJavaScriptVisitor.d.ts +14 -0
  254. package/dist/types/renderers/js/index.d.ts +6 -0
  255. package/dist/types/renderers/utils.d.ts +5 -0
  256. package/dist/types/utils.d.ts +8 -0
  257. package/dist/types/visitors/BaseDelegateVisitor.d.ts +28 -0
  258. package/dist/types/visitors/BaseNodeOrNullVisitor.d.ts +25 -0
  259. package/dist/types/visitors/BaseNodeVisitor.d.ts +25 -0
  260. package/dist/types/visitors/BaseThrowVisitor.d.ts +25 -0
  261. package/dist/types/visitors/BaseVoidVisitor.d.ts +25 -0
  262. package/dist/types/visitors/DefaultVisitor.d.ts +5 -0
  263. package/dist/types/visitors/Dependency.d.ts +17 -0
  264. package/dist/types/visitors/NodeSelector.d.ts +11 -0
  265. package/dist/types/visitors/NodeStack.d.ts +14 -0
  266. package/dist/types/visitors/ValidatorBag.d.ts +22 -0
  267. package/dist/types/visitors/Visitable.d.ts +4 -0
  268. package/dist/types/visitors/Visitor.d.ts +24 -0
  269. package/dist/types/visitors/aggregators/GetByteSizeVisitor.d.ts +27 -0
  270. package/dist/types/visitors/aggregators/GetDefaultValidatorBagVisitor.d.ts +32 -0
  271. package/dist/types/visitors/aggregators/GetDefinedTypeHistogramVisitor.d.ts +37 -0
  272. package/dist/types/visitors/aggregators/GetNodeInlineStringVisitor.d.ts +25 -0
  273. package/dist/types/visitors/aggregators/GetNodeTreeStringVisitor.d.ts +29 -0
  274. package/dist/types/visitors/aggregators/GetResolvedInstructionAccountsVisitor.d.ts +19 -0
  275. package/dist/types/visitors/aggregators/index.d.ts +6 -0
  276. package/dist/types/visitors/index.d.ts +14 -0
  277. package/dist/types/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.d.ts +8 -0
  278. package/dist/types/visitors/transformers/AutoSetFixedAccountSizesVisitor.d.ts +5 -0
  279. package/dist/types/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.d.ts +8 -0
  280. package/dist/types/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.d.ts +5 -0
  281. package/dist/types/visitors/transformers/DeleteNodesVisitor.d.ts +5 -0
  282. package/dist/types/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.d.ts +12 -0
  283. package/dist/types/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.d.ts +27 -0
  284. package/dist/types/visitors/transformers/SetInstructionDiscriminatorsVisitor.d.ts +18 -0
  285. package/dist/types/visitors/transformers/SetLeafWrappersVisitor.d.ts +8 -0
  286. package/dist/types/visitors/transformers/SetMissingDefinedTypesVisitor.d.ts +7 -0
  287. package/dist/types/visitors/transformers/SetStructDefaultValuesVisitor.d.ts +11 -0
  288. package/dist/types/visitors/transformers/TransformNodesVisitor.d.ts +37 -0
  289. package/dist/types/visitors/transformers/TransformU8ArraysToBytesVisitor.d.ts +8 -0
  290. package/dist/types/visitors/transformers/UnwrapDefinedTypesVisitor.d.ts +11 -0
  291. package/dist/types/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.d.ts +5 -0
  292. package/dist/types/visitors/transformers/UnwrapInstructionArgsStructVisitor.d.ts +4 -0
  293. package/dist/types/visitors/transformers/UnwrapStructVisitor.d.ts +8 -0
  294. package/dist/types/visitors/transformers/UpdateAccountsVisitor.d.ts +11 -0
  295. package/dist/types/visitors/transformers/UpdateDefinedTypesVisitor.d.ts +11 -0
  296. package/dist/types/visitors/transformers/UpdateErrorsVisitor.d.ts +12 -0
  297. package/dist/types/visitors/transformers/UpdateInstructionsVisitor.d.ts +41 -0
  298. package/dist/types/visitors/transformers/UpdateProgramsVisitor.d.ts +9 -0
  299. package/dist/types/visitors/transformers/_renameHelpers.d.ts +3 -0
  300. package/dist/types/visitors/transformers/index.d.ts +22 -0
  301. package/dist/types/visitors/workers/ConsoleLogVisitor.d.ts +4 -0
  302. package/dist/types/visitors/workers/ThrowValidatorItemsVisitor.d.ts +9 -0
  303. package/dist/types/visitors/workers/index.d.ts +2 -0
  304. package/package.json +72 -0
  305. package/src/Kinobi.ts +28 -0
  306. package/src/idl/Idl.ts +19 -0
  307. package/src/idl/IdlAccount.ts +14 -0
  308. package/src/idl/IdlDefinedType.ts +7 -0
  309. package/src/idl/IdlError.ts +6 -0
  310. package/src/idl/IdlInstruction.ts +29 -0
  311. package/src/idl/IdlType.ts +72 -0
  312. package/src/idl/index.ts +6 -0
  313. package/src/index.ts +5 -0
  314. package/src/logs.ts +77 -0
  315. package/src/nodes/AccountNode.ts +126 -0
  316. package/src/nodes/DefinedTypeNode.ts +69 -0
  317. package/src/nodes/ErrorNode.ts +57 -0
  318. package/src/nodes/InstructionNode.ts +215 -0
  319. package/src/nodes/Node.ts +40 -0
  320. package/src/nodes/ProgramNode.ts +101 -0
  321. package/src/nodes/RootNode.ts +64 -0
  322. package/src/nodes/TypeArrayNode.ts +40 -0
  323. package/src/nodes/TypeDefinedLinkNode.ts +40 -0
  324. package/src/nodes/TypeEnumEmptyVariantNode.ts +38 -0
  325. package/src/nodes/TypeEnumNode.ts +67 -0
  326. package/src/nodes/TypeEnumStructVariantNode.ts +50 -0
  327. package/src/nodes/TypeEnumTupleVariantNode.ts +46 -0
  328. package/src/nodes/TypeEnumVariantNode.ts +32 -0
  329. package/src/nodes/TypeLeafNode.ts +73 -0
  330. package/src/nodes/TypeLeafWrapperNode.ts +41 -0
  331. package/src/nodes/TypeMapNode.ts +48 -0
  332. package/src/nodes/TypeNode.ts +138 -0
  333. package/src/nodes/TypeOptionNode.ts +41 -0
  334. package/src/nodes/TypeSetNode.ts +39 -0
  335. package/src/nodes/TypeStructFieldNode.ts +63 -0
  336. package/src/nodes/TypeStructNode.ts +43 -0
  337. package/src/nodes/TypeTupleNode.ts +36 -0
  338. package/src/nodes/TypeVecNode.ts +34 -0
  339. package/src/nodes/ValueNode.ts +92 -0
  340. package/src/nodes/index.ts +25 -0
  341. package/src/renderers/RenderMap.ts +34 -0
  342. package/src/renderers/WriteRenderMapVisitor.ts +15 -0
  343. package/src/renderers/index.ts +4 -0
  344. package/src/renderers/js/GetJavaScriptRenderMapVisitor.ts +437 -0
  345. package/src/renderers/js/GetJavaScriptTypeManifestVisitor.ts +522 -0
  346. package/src/renderers/js/GetJavaScriptValidatorBagVisitor.ts +202 -0
  347. package/src/renderers/js/JavaScriptImportMap.ts +89 -0
  348. package/src/renderers/js/RenderJavaScriptValueNode.ts +110 -0
  349. package/src/renderers/js/RenderJavaScriptVisitor.ts +45 -0
  350. package/src/renderers/js/index.ts +6 -0
  351. package/src/renderers/js/templates/accountsIndex.njk +9 -0
  352. package/src/renderers/js/templates/accountsPage.njk +122 -0
  353. package/src/renderers/js/templates/definedTypesIndex.njk +9 -0
  354. package/src/renderers/js/templates/definedTypesPage.njk +13 -0
  355. package/src/renderers/js/templates/definedTypesPageDataEnums.njk +26 -0
  356. package/src/renderers/js/templates/errorsIndex.njk +9 -0
  357. package/src/renderers/js/templates/errorsPage.njk +43 -0
  358. package/src/renderers/js/templates/instructionsIndex.njk +9 -0
  359. package/src/renderers/js/templates/instructionsPage.njk +71 -0
  360. package/src/renderers/js/templates/instructionsPageAccountMetas.njk +61 -0
  361. package/src/renderers/js/templates/instructionsPageAccounts.njk +12 -0
  362. package/src/renderers/js/templates/instructionsPageArgs.njk +7 -0
  363. package/src/renderers/js/templates/layout.njk +9 -0
  364. package/src/renderers/js/templates/macros.njk +40 -0
  365. package/src/renderers/js/templates/programsIndex.njk +9 -0
  366. package/src/renderers/js/templates/programsPage.njk +23 -0
  367. package/src/renderers/js/templates/rootIndex.njk +23 -0
  368. package/src/renderers/utils.ts +46 -0
  369. package/src/utils.ts +41 -0
  370. package/src/visitors/BaseDelegateVisitor.ts +98 -0
  371. package/src/visitors/BaseNodeOrNullVisitor.ts +202 -0
  372. package/src/visitors/BaseNodeVisitor.ts +173 -0
  373. package/src/visitors/BaseThrowVisitor.ts +101 -0
  374. package/src/visitors/BaseVoidVisitor.ts +104 -0
  375. package/src/visitors/DefaultVisitor.ts +45 -0
  376. package/src/visitors/Dependency.ts +23 -0
  377. package/src/visitors/NodeSelector.ts +82 -0
  378. package/src/visitors/NodeStack.ts +109 -0
  379. package/src/visitors/ValidatorBag.ts +90 -0
  380. package/src/visitors/Visitable.ts +5 -0
  381. package/src/visitors/Visitor.ts +36 -0
  382. package/src/visitors/aggregators/GetByteSizeVisitor.ts +167 -0
  383. package/src/visitors/aggregators/GetDefaultValidatorBagVisitor.ts +332 -0
  384. package/src/visitors/aggregators/GetDefinedTypeHistogramVisitor.ts +213 -0
  385. package/src/visitors/aggregators/GetNodeInlineStringVisitor.ts +140 -0
  386. package/src/visitors/aggregators/GetNodeTreeStringVisitor.ts +260 -0
  387. package/src/visitors/aggregators/GetResolvedInstructionAccountsVisitor.ts +153 -0
  388. package/src/visitors/aggregators/index.ts +6 -0
  389. package/src/visitors/index.ts +15 -0
  390. package/src/visitors/transformers/AutoSetAnchorDiscriminatorsVisitor.ts +90 -0
  391. package/src/visitors/transformers/AutoSetFixedAccountSizesVisitor.ts +31 -0
  392. package/src/visitors/transformers/CreateSubInstructionsFromEnumArgsVisitor.ts +117 -0
  393. package/src/visitors/transformers/DeduplicateIdenticalDefinedTypesVisitor.ts +72 -0
  394. package/src/visitors/transformers/DeleteNodesVisitor.ts +13 -0
  395. package/src/visitors/transformers/SetAccountDiscriminatorFromFieldVisitor.ts +52 -0
  396. package/src/visitors/transformers/SetInstructionAccountDefaultValuesVisitor.ts +236 -0
  397. package/src/visitors/transformers/SetInstructionDiscriminatorsVisitor.ts +54 -0
  398. package/src/visitors/transformers/SetLeafWrappersVisitor.ts +20 -0
  399. package/src/visitors/transformers/SetMissingDefinedTypesVisitor.ts +73 -0
  400. package/src/visitors/transformers/SetStructDefaultValuesVisitor.ts +45 -0
  401. package/src/visitors/transformers/TransformNodesVisitor.ts +215 -0
  402. package/src/visitors/transformers/TransformU8ArraysToBytesVisitor.ts +27 -0
  403. package/src/visitors/transformers/UnwrapDefinedTypesVisitor.ts +65 -0
  404. package/src/visitors/transformers/UnwrapInstructionArgsDefinedTypesVisitor.ts +35 -0
  405. package/src/visitors/transformers/UnwrapInstructionArgsStructVisitor.ts +22 -0
  406. package/src/visitors/transformers/UnwrapStructVisitor.ts +62 -0
  407. package/src/visitors/transformers/UpdateAccountsVisitor.ts +45 -0
  408. package/src/visitors/transformers/UpdateDefinedTypesVisitor.ts +71 -0
  409. package/src/visitors/transformers/UpdateErrorsVisitor.ts +41 -0
  410. package/src/visitors/transformers/UpdateInstructionsVisitor.ts +135 -0
  411. package/src/visitors/transformers/UpdateProgramsVisitor.ts +39 -0
  412. package/src/visitors/transformers/_renameHelpers.ts +47 -0
  413. package/src/visitors/transformers/index.ts +22 -0
  414. package/src/visitors/workers/ConsoleLogVisitor.ts +8 -0
  415. package/src/visitors/workers/ThrowValidatorItemsVisitor.ts +42 -0
  416. package/src/visitors/workers/index.ts +2 -0
@@ -0,0 +1,260 @@
1
+ import type * as nodes from '../../nodes';
2
+ import { Visitor } from '../Visitor';
3
+
4
+ export class GetNodeTreeStringVisitor implements Visitor<string> {
5
+ indent = 0;
6
+
7
+ readonly separator: string;
8
+
9
+ constructor(separator = '| ') {
10
+ this.separator = separator;
11
+ }
12
+
13
+ visitRoot(root: nodes.RootNode): string {
14
+ this.indent += 1;
15
+ const children = root.programs.map((program) => program.accept(this));
16
+ this.indent -= 1;
17
+ return [this.indented('[RootNode]'), ...children].join('\n');
18
+ }
19
+
20
+ visitProgram(program: nodes.ProgramNode): string {
21
+ this.indent += 1;
22
+ const children = [
23
+ ...program.accounts.map((account) => account.accept(this)),
24
+ ...program.instructionsWithSubs.map((ix) => ix.accept(this)),
25
+ ...program.definedTypes.map((type) => type.accept(this)),
26
+ ...program.errors.map((type) => type.accept(this)),
27
+ ];
28
+ this.indent -= 1;
29
+ const data = program.metadata;
30
+ const tags = [];
31
+ if (data.publicKey) tags.push(`publicKey: ${data.publicKey}`);
32
+ if (data.version) tags.push(`version: ${data.version}`);
33
+ if (data.origin) tags.push(`origin: ${data.origin}`);
34
+ const tagsStr = tags.length > 0 ? ` (${tags.join(', ')})` : '';
35
+ return [
36
+ this.indented(`[ProgramNode] ${data.name}${tagsStr}`),
37
+ ...children,
38
+ ].join('\n');
39
+ }
40
+
41
+ visitAccount(account: nodes.AccountNode): string {
42
+ const children: string[] = [];
43
+ children.push(this.indented(`[AccountNode] ${account.name}`));
44
+ this.indent += 1;
45
+ if (account.metadata.size !== null) {
46
+ children.push(this.indented(`size: ${account.metadata.size}`));
47
+ }
48
+ if (account.metadata.seeds.length > 0) {
49
+ children.push(this.indented('seeds:'));
50
+ this.indent += 1;
51
+ children.push(
52
+ ...account.metadata.seeds.map((seed) => {
53
+ if (seed.kind === 'programId') return this.indented('programId');
54
+ if (seed.kind === 'literal') return this.indented(`"${seed.value}"`);
55
+ this.indent += 1;
56
+ const type = seed.type.accept(this);
57
+ this.indent -= 1;
58
+ return [
59
+ this.indented(`${seed.name} (${seed.description})`),
60
+ type,
61
+ ].join('\n');
62
+ })
63
+ );
64
+ this.indent -= 1;
65
+ }
66
+ children.push(account.type.accept(this));
67
+ this.indent -= 1;
68
+ return children.join('\n');
69
+ }
70
+
71
+ visitInstruction(instruction: nodes.InstructionNode): string {
72
+ const children: string[] = [];
73
+ children.push(this.indented(`[InstructionNode] ${instruction.name}`));
74
+ this.indent += 1;
75
+ children.push(this.indented('accounts:'));
76
+ this.indent += 1;
77
+ children.push(
78
+ ...instruction.accounts.map((account) => {
79
+ const tags = [];
80
+ if (account.isWritable) tags.push('writable');
81
+ if (account.isSigner) tags.push('signer');
82
+ if (account.isOptional) tags.push('optional');
83
+ if (account.defaultsTo.kind !== 'none')
84
+ tags.push(`defaults to ${account.defaultsTo.kind}`);
85
+ const tagsAsString = tags.length > 0 ? ` (${tags.join(', ')})` : '';
86
+ return this.indented(account.name + tagsAsString);
87
+ })
88
+ );
89
+ this.indent -= 1;
90
+ children.push(this.indented('arguments:'));
91
+ this.indent += 1;
92
+ children.push(instruction.args.accept(this));
93
+ this.indent -= 1;
94
+ this.indent -= 1;
95
+ return children.join('\n');
96
+ }
97
+
98
+ visitDefinedType(definedType: nodes.DefinedTypeNode): string {
99
+ this.indent += 1;
100
+ const child = definedType.type.accept(this);
101
+ this.indent -= 1;
102
+ return [this.indented(`[DefinedTypeNode] ${definedType.name}`), child].join(
103
+ '\n'
104
+ );
105
+ }
106
+
107
+ visitError(error: nodes.ErrorNode): string {
108
+ return this.indented(
109
+ `[ErrorNode] ${error.name} (${error.code}): ${error.message}`
110
+ );
111
+ }
112
+
113
+ visitTypeArray(typeArray: nodes.TypeArrayNode): string {
114
+ this.indent += 1;
115
+ const child = typeArray.itemType.accept(this);
116
+ this.indent -= 1;
117
+ return [
118
+ this.indented(`[TypeArrayNode] Size: ${typeArray.size}`),
119
+ child,
120
+ ].join('\n');
121
+ }
122
+
123
+ visitTypeDefinedLink(typeDefinedLink: nodes.TypeDefinedLinkNode): string {
124
+ return this.indented(
125
+ `[TypeDefinedLinkNode] ${typeDefinedLink.definedType}`
126
+ );
127
+ }
128
+
129
+ visitTypeEnum(typeEnum: nodes.TypeEnumNode): string {
130
+ this.indent += 1;
131
+ const children = typeEnum.variants.map((variant) => variant.accept(this));
132
+ this.indent -= 1;
133
+ return [
134
+ this.indented(
135
+ `[TypeEnumNode]${typeEnum.name ? ` ${typeEnum.name}` : ''}`
136
+ ),
137
+ ...children,
138
+ ].join('\n');
139
+ }
140
+
141
+ visitTypeEnumEmptyVariant(
142
+ typeEnumEmptyVariant: nodes.TypeEnumEmptyVariantNode
143
+ ): string {
144
+ return this.indented(
145
+ `[TypeEnumEmptyVariantNode] ${typeEnumEmptyVariant.name}`
146
+ );
147
+ }
148
+
149
+ visitTypeEnumStructVariant(
150
+ typeEnumStructVariant: nodes.TypeEnumStructVariantNode
151
+ ): string {
152
+ this.indent += 1;
153
+ const child = typeEnumStructVariant.struct.accept(this);
154
+ this.indent -= 1;
155
+ return [
156
+ this.indented(
157
+ `[TypeEnumStructVariantNode] ${typeEnumStructVariant.name}`
158
+ ),
159
+ child,
160
+ ].join('\n');
161
+ }
162
+
163
+ visitTypeEnumTupleVariant(
164
+ typeEnumTupleVariant: nodes.TypeEnumTupleVariantNode
165
+ ): string {
166
+ this.indent += 1;
167
+ const child = typeEnumTupleVariant.tuple.accept(this);
168
+ this.indent -= 1;
169
+ return [
170
+ this.indented(`[TypeEnumTupleVariantNode] ${typeEnumTupleVariant.name}`),
171
+ child,
172
+ ].join('\n');
173
+ }
174
+
175
+ visitTypeLeaf(typeLeaf: nodes.TypeLeafNode): string {
176
+ return this.indented(`[TypeLeafNode] ${typeLeaf.type}`);
177
+ }
178
+
179
+ visitTypeLeafWrapper(typeLeafWrapper: nodes.TypeLeafWrapperNode): string {
180
+ this.indent += 1;
181
+ const child = typeLeafWrapper.leaf.accept(this);
182
+ this.indent -= 1;
183
+ return [
184
+ this.indented(`[TypeLeafWrapperNode] ${typeLeafWrapper.wrapper.kind}`),
185
+ child,
186
+ ].join('\n');
187
+ }
188
+
189
+ visitTypeMap(typeMap: nodes.TypeMapNode): string {
190
+ const result: string[] = [];
191
+ result.push(this.indented(`[TypeMapNode] ${typeMap.mapType}`));
192
+ this.indent += 1;
193
+ result.push(this.indented('keys:'));
194
+ this.indent += 1;
195
+ result.push(typeMap.keyType.accept(this));
196
+ this.indent -= 1;
197
+ result.push(this.indented('values:'));
198
+ this.indent += 1;
199
+ result.push(typeMap.valueType.accept(this));
200
+ this.indent -= 1;
201
+ this.indent -= 1;
202
+ return result.join('\n');
203
+ }
204
+
205
+ visitTypeOption(typeOption: nodes.TypeOptionNode): string {
206
+ this.indent += 1;
207
+ const child = typeOption.type.accept(this);
208
+ this.indent -= 1;
209
+ return [this.indented('[TypeOptionNode]'), child].join('\n');
210
+ }
211
+
212
+ visitTypeSet(typeSet: nodes.TypeSetNode): string {
213
+ this.indent += 1;
214
+ const child = typeSet.type.accept(this);
215
+ this.indent -= 1;
216
+ return [this.indented(`[TypeSetNode] ${typeSet.setType}`), child].join(
217
+ '\n'
218
+ );
219
+ }
220
+
221
+ visitTypeStruct(typeStruct: nodes.TypeStructNode): string {
222
+ this.indent += 1;
223
+ const children = typeStruct.fields.map((field) => field.accept(this));
224
+ this.indent -= 1;
225
+ return [
226
+ this.indented(`[TypeStructNode] ${typeStruct.name}`),
227
+ ...children,
228
+ ].join('\n');
229
+ }
230
+
231
+ visitTypeStructField(typeStructField: nodes.TypeStructFieldNode): string {
232
+ this.indent += 1;
233
+ const child = typeStructField.type.accept(this);
234
+ this.indent -= 1;
235
+ return [
236
+ this.indented(`[TypeStructFieldNode] ${typeStructField.name}`),
237
+ child,
238
+ ].join('\n');
239
+ }
240
+
241
+ visitTypeTuple(typeTuple: nodes.TypeTupleNode): string {
242
+ this.indent += 1;
243
+ const children = typeTuple.itemTypes.map((itemType) =>
244
+ itemType.accept(this)
245
+ );
246
+ this.indent -= 1;
247
+ return [this.indented('[TypeTupleNode]'), ...children].join('\n');
248
+ }
249
+
250
+ visitTypeVec(typeVec: nodes.TypeVecNode): string {
251
+ this.indent += 1;
252
+ const child = typeVec.itemType.accept(this);
253
+ this.indent -= 1;
254
+ return [this.indented('[TypeVecNode]'), child].join('\n');
255
+ }
256
+
257
+ indented(text: string) {
258
+ return this.separator.repeat(this.indent) + text;
259
+ }
260
+ }
@@ -0,0 +1,153 @@
1
+ import type * as nodes from '../../nodes';
2
+ import { InstructionNodeAccountDefaultsSeed } from '../../nodes';
3
+ import { BaseThrowVisitor } from '../BaseThrowVisitor';
4
+
5
+ export type ResolvedInstructionAccount = nodes.InstructionNodeAccount & {
6
+ position: number;
7
+ dependencyPosition: number;
8
+ dependsOn: string[];
9
+ resolvedIsSigner: boolean;
10
+ resolvedIsOptionalSigner: boolean;
11
+ resolvedIsOptional: boolean;
12
+ };
13
+
14
+ export class GetResolvedInstructionAccountsVisitor extends BaseThrowVisitor<
15
+ ResolvedInstructionAccount[]
16
+ > {
17
+ protected stack: string[] = [];
18
+
19
+ protected visited = new Map<string, ResolvedInstructionAccount>();
20
+
21
+ protected raw = new Map<string, [nodes.InstructionNodeAccount, number]>();
22
+
23
+ protected error: string | null = null;
24
+
25
+ getError(): string | null {
26
+ return this.error;
27
+ }
28
+
29
+ visitInstruction(
30
+ instruction: nodes.InstructionNode
31
+ ): ResolvedInstructionAccount[] {
32
+ // Ensure we always start with a clean slate.
33
+ this.error = null;
34
+ this.stack = [];
35
+ this.visited = new Map();
36
+ this.raw = instruction.accounts.reduce(
37
+ (map, account, index) => map.set(account.name, [account, index]),
38
+ new Map<string, [nodes.InstructionNodeAccount, number]>()
39
+ );
40
+
41
+ // Visit all instruction accounts.
42
+ this.raw.forEach(([account, index]) => {
43
+ this.handleInstructionAccount(instruction, account, index);
44
+ });
45
+
46
+ return [...this.visited.values()].sort((a, b) => a.position - b.position);
47
+ }
48
+
49
+ handleInstructionAccount(
50
+ instruction: nodes.InstructionNode,
51
+ account: nodes.InstructionNodeAccount,
52
+ index: number
53
+ ): void {
54
+ // Ensure we don't visit the same account twice.
55
+ if (this.visited.has(account.name)) {
56
+ return;
57
+ }
58
+
59
+ // Ensure we don't have a circular dependency.
60
+ if (this.stack.includes(account.name)) {
61
+ const cycle = [...this.stack, account.name].join(' -> ');
62
+ this.error =
63
+ `Circular dependency detected in the accounts of ` +
64
+ `the "${instruction.name}" instruction. ` +
65
+ `Got the following account dependency cycle: ${cycle}.`;
66
+ throw new Error(this.error);
67
+ }
68
+
69
+ // Get account dependencies.
70
+ const dependsOn: string[] = [];
71
+ if (account.defaultsTo.kind === 'account') {
72
+ dependsOn.push(account.defaultsTo.name);
73
+ } else if (account.defaultsTo.kind === 'pda') {
74
+ type AccountSeed = Extract<
75
+ InstructionNodeAccountDefaultsSeed,
76
+ { kind: 'account' }
77
+ >;
78
+ const accounts = Object.values(account.defaultsTo.seeds)
79
+ .filter((seed): seed is AccountSeed => seed.kind === 'account')
80
+ .map((seed) => seed.name);
81
+ dependsOn.push(...new Set(accounts));
82
+ }
83
+
84
+ // Visit account dependencies first.
85
+ this.stack.push(account.name);
86
+ dependsOn.forEach((name) => {
87
+ const rawDependency = this.raw.get(name);
88
+ if (!rawDependency) {
89
+ this.error =
90
+ `Account "${name}" is not a valid dependency of account ` +
91
+ `"${account.name}" in the "${instruction.name}" instruction.`;
92
+ throw new Error(this.error);
93
+ }
94
+ const [dependency, dependencyIndex] = rawDependency;
95
+ this.handleInstructionAccount(instruction, dependency, dependencyIndex);
96
+ });
97
+ this.stack.pop();
98
+
99
+ const resolved: ResolvedInstructionAccount = {
100
+ ...account,
101
+ position: index,
102
+ dependencyPosition: this.visited.size,
103
+ dependsOn,
104
+ resolvedIsSigner: account.isSigner,
105
+ resolvedIsOptionalSigner: account.isOptionalSigner,
106
+ resolvedIsOptional: account.isOptional,
107
+ };
108
+
109
+ switch (resolved.defaultsTo.kind) {
110
+ case 'account':
111
+ const defaultAccount = this.visited.get(resolved.defaultsTo.name)!;
112
+ const resolvedIsPublicKey =
113
+ !account.isSigner && !defaultAccount.isSigner;
114
+ resolved.resolvedIsSigner = account.isSigner && defaultAccount.isSigner;
115
+ resolved.resolvedIsOptionalSigner =
116
+ !resolved.resolvedIsSigner && !resolvedIsPublicKey;
117
+ resolved.resolvedIsOptional = defaultAccount.isOptional;
118
+ break;
119
+ case 'publicKey':
120
+ case 'program':
121
+ case 'programId':
122
+ resolved.resolvedIsOptionalSigner = account.isSigner;
123
+ resolved.resolvedIsSigner = false;
124
+ resolved.resolvedIsOptional = false;
125
+ break;
126
+ case 'pda':
127
+ resolved.resolvedIsOptionalSigner = account.isSigner;
128
+ resolved.resolvedIsSigner = false;
129
+ resolved.resolvedIsOptional = false;
130
+ const { seeds } = resolved.defaultsTo;
131
+ Object.keys(seeds).forEach((seedKey) => {
132
+ const seed = seeds[seedKey];
133
+ if (seed.kind !== 'account') return;
134
+ const dependency = this.visited.get(seed.name)!;
135
+ if (dependency.resolvedIsOptional) {
136
+ this.error =
137
+ `Cannot use optional account "${seed.name}" as the "${seedKey}" PDA seed ` +
138
+ `for the "${account.name}" account of the "${instruction.name}" instruction.`;
139
+ throw new Error(this.error);
140
+ }
141
+ });
142
+ break;
143
+ case 'identity':
144
+ case 'payer':
145
+ resolved.resolvedIsOptional = false;
146
+ break;
147
+ default:
148
+ break;
149
+ }
150
+
151
+ this.visited.set(account.name, resolved);
152
+ }
153
+ }
@@ -0,0 +1,6 @@
1
+ export * from './GetByteSizeVisitor';
2
+ export * from './GetDefaultValidatorBagVisitor';
3
+ export * from './GetDefinedTypeHistogramVisitor';
4
+ export * from './GetNodeInlineStringVisitor';
5
+ export * from './GetNodeTreeStringVisitor';
6
+ export * from './GetResolvedInstructionAccountsVisitor';
@@ -0,0 +1,15 @@
1
+ export * from './aggregators';
2
+ export * from './transformers';
3
+ export * from './workers';
4
+
5
+ export * from './BaseDelegateVisitor';
6
+ export * from './BaseNodeVisitor';
7
+ export * from './BaseThrowVisitor';
8
+ export * from './BaseVoidVisitor';
9
+ export * from './DefaultVisitor';
10
+ export * from './Dependency';
11
+ export * from './NodeSelector';
12
+ export * from './ValidatorBag';
13
+ export * from './NodeStack';
14
+ export * from './Visitable';
15
+ export * from './Visitor';
@@ -0,0 +1,90 @@
1
+ import { sha256 } from '@noble/hashes/sha256';
2
+ import { snakeCase } from '../../utils';
3
+ import * as nodes from '../../nodes';
4
+ import { BaseNodeVisitor } from '../BaseNodeVisitor';
5
+
6
+ export class AutoSetAnchorDiscriminatorsVisitor extends BaseNodeVisitor {
7
+ protected program: nodes.ProgramNode | null = null;
8
+
9
+ visitProgram(program: nodes.ProgramNode): nodes.Node {
10
+ this.program = program;
11
+ const visitedProgram = new nodes.ProgramNode(
12
+ program.metadata,
13
+ program.accounts
14
+ .map((account) => account.accept(this))
15
+ .filter(nodes.assertNodeFilter(nodes.assertAccountNode)),
16
+ program.instructions
17
+ .map((instruction) => instruction.accept(this))
18
+ .filter(nodes.assertNodeFilter(nodes.assertInstructionNode)),
19
+ program.definedTypes,
20
+ program.errors
21
+ );
22
+ this.program = null;
23
+ return visitedProgram;
24
+ }
25
+
26
+ visitAccount(account: nodes.AccountNode): nodes.Node {
27
+ const shouldAddDiscriminator = this.program?.metadata.origin === 'anchor';
28
+ if (!shouldAddDiscriminator) return account;
29
+
30
+ const idlName = snakeCase(account.metadata.idlName);
31
+ const hash = sha256(`global:${idlName}`).slice(0, 8);
32
+
33
+ const discriminatorField = new nodes.TypeStructFieldNode(
34
+ {
35
+ name: 'discriminator',
36
+ docs: [],
37
+ defaultsTo: {
38
+ strategy: 'omitted',
39
+ value: getValueNodeFromBytes(hash),
40
+ },
41
+ },
42
+ new nodes.TypeArrayNode(new nodes.TypeLeafNode('u8'), 8)
43
+ );
44
+
45
+ return new nodes.AccountNode(
46
+ {
47
+ ...account.metadata,
48
+ discriminator: { kind: 'field', name: 'discriminator' },
49
+ },
50
+ new nodes.TypeStructNode(account.type.name, [
51
+ discriminatorField,
52
+ ...account.type.fields,
53
+ ])
54
+ );
55
+ }
56
+
57
+ visitInstruction(instruction: nodes.InstructionNode): nodes.Node {
58
+ const shouldAddDiscriminator = this.program?.metadata.origin === 'anchor';
59
+ if (!shouldAddDiscriminator) return instruction;
60
+
61
+ const idlName = snakeCase(instruction.metadata.idlName);
62
+ const hash = sha256(`global:${idlName}`).slice(0, 8);
63
+
64
+ const discriminatorField = new nodes.TypeStructFieldNode(
65
+ {
66
+ name: 'discriminator',
67
+ docs: [],
68
+ defaultsTo: {
69
+ strategy: 'omitted',
70
+ value: getValueNodeFromBytes(hash),
71
+ },
72
+ },
73
+ new nodes.TypeArrayNode(new nodes.TypeLeafNode('u8'), 8)
74
+ );
75
+
76
+ return new nodes.InstructionNode(
77
+ instruction.metadata,
78
+ instruction.accounts,
79
+ new nodes.TypeStructNode(instruction.args.name, [
80
+ discriminatorField,
81
+ ...instruction.args.fields,
82
+ ]),
83
+ instruction.subInstructions
84
+ );
85
+ }
86
+ }
87
+
88
+ function getValueNodeFromBytes(bytes: Uint8Array): nodes.ListValueNode {
89
+ return nodes.vList([...bytes].map((byte) => nodes.vScalar(byte)));
90
+ }
@@ -0,0 +1,31 @@
1
+ import * as nodes from '../../nodes';
2
+ import { GetByteSizeVisitor } from '../aggregators';
3
+ import { BaseThrowVisitor } from '../BaseThrowVisitor';
4
+ import { TransformNodesVisitor } from './TransformNodesVisitor';
5
+
6
+ export class AutoSetFixedAccountSizesVisitor extends BaseThrowVisitor<nodes.RootNode> {
7
+ visitRoot(root: nodes.RootNode): nodes.RootNode {
8
+ // Prepare the visitor that gets the byte size of a type.
9
+ const byteSizeVisitor = new GetByteSizeVisitor();
10
+ byteSizeVisitor.registerDefinedTypes(root.allDefinedTypes);
11
+
12
+ // Prepare the visitor that transforms account nodes.
13
+ const transformVisitor = new TransformNodesVisitor([
14
+ {
15
+ selector: (node) =>
16
+ nodes.isAccountNode(node) && node.metadata.size === null,
17
+ transformer: (node) => {
18
+ nodes.assertAccountNode(node);
19
+ const size = node.type.accept(byteSizeVisitor);
20
+ if (size === null) return node;
21
+ return new nodes.AccountNode({ ...node.metadata, size }, node.type);
22
+ },
23
+ },
24
+ ]);
25
+
26
+ // Execute the transform visitor on the Root node.
27
+ const transformedRoot = root.accept(transformVisitor);
28
+ nodes.assertRootNode(transformedRoot);
29
+ return transformedRoot;
30
+ }
31
+ }
@@ -0,0 +1,117 @@
1
+ import { mainCase } from '../../utils';
2
+ import { logWarn } from '../../logs';
3
+ import * as nodes from '../../nodes';
4
+ import { NodeTransform, TransformNodesVisitor } from './TransformNodesVisitor';
5
+ import { unwrapStruct } from './UnwrapStructVisitor';
6
+
7
+ export class CreateSubInstructionsFromEnumArgsVisitor extends TransformNodesVisitor {
8
+ protected allDefinedTypes = new Map<string, nodes.DefinedTypeNode>();
9
+
10
+ constructor(readonly map: Record<string, string>) {
11
+ const transforms = Object.entries(map).map(
12
+ ([selector, argNameInput]): NodeTransform => {
13
+ const selectorStack = selector.split('.');
14
+ const name = selectorStack.pop();
15
+ return {
16
+ selector: { type: 'instruction', stack: selectorStack, name },
17
+ transformer: (node) => {
18
+ nodes.assertInstructionNode(node);
19
+ const argName = mainCase(argNameInput);
20
+ const argFieldIndex = node.args.fields.findIndex(
21
+ (field) => field.name === argName
22
+ );
23
+ const argField =
24
+ argFieldIndex >= 0 ? node.args.fields[argFieldIndex] : null;
25
+ if (!argField) {
26
+ logWarn(`Could not find instruction argument [${argName}].`);
27
+ return node;
28
+ }
29
+
30
+ let argType: nodes.TypeEnumNode;
31
+ if (nodes.isTypeEnumNode(argField.type)) {
32
+ argType = argField.type;
33
+ } else if (
34
+ nodes.isTypeDefinedLinkNode(argField.type) &&
35
+ this.allDefinedTypes.has(argField.type.name)
36
+ ) {
37
+ const linkedType =
38
+ this.allDefinedTypes.get(argField.type.name)?.type ?? null;
39
+ nodes.assertTypeEnumNode(linkedType);
40
+ argType = linkedType;
41
+ } else {
42
+ logWarn(
43
+ `Could not find an enum type for ` +
44
+ `instruction argument [${argName}].`
45
+ );
46
+ return node;
47
+ }
48
+
49
+ const subInstructions = argType.variants.map(
50
+ (variant, index): nodes.InstructionNode => {
51
+ const subName = mainCase(`${node.name} ${variant.name}`);
52
+ const subFields = node.args.fields.slice(0, argFieldIndex);
53
+ subFields.push(
54
+ new nodes.TypeStructFieldNode(
55
+ {
56
+ name: `${subName}Discriminator`,
57
+ docs: [],
58
+ defaultsTo: {
59
+ strategy: 'omitted',
60
+ value: nodes.vScalar(index),
61
+ },
62
+ },
63
+ new nodes.TypeLeafNode('u8')
64
+ )
65
+ );
66
+ if (nodes.isTypeEnumStructVariantNode(variant)) {
67
+ subFields.push(
68
+ new nodes.TypeStructFieldNode(
69
+ argField.metadata,
70
+ variant.struct
71
+ )
72
+ );
73
+ } else if (nodes.isTypeEnumTupleVariantNode(variant)) {
74
+ subFields.push(
75
+ new nodes.TypeStructFieldNode(
76
+ argField.metadata,
77
+ variant.tuple
78
+ )
79
+ );
80
+ }
81
+ subFields.push(...node.args.fields.slice(argFieldIndex + 1));
82
+
83
+ return new nodes.InstructionNode(
84
+ { ...node.metadata, name: subName },
85
+ node.accounts,
86
+ unwrapStruct(
87
+ new nodes.TypeStructNode(
88
+ `${subName}InstructionArgs`,
89
+ subFields
90
+ )
91
+ ),
92
+ []
93
+ );
94
+ }
95
+ );
96
+
97
+ return new nodes.InstructionNode(
98
+ node.metadata,
99
+ node.accounts,
100
+ node.args,
101
+ [...node.subInstructions, ...subInstructions]
102
+ );
103
+ },
104
+ };
105
+ }
106
+ );
107
+
108
+ super(transforms);
109
+ }
110
+
111
+ visitRoot(root: nodes.RootNode): nodes.Node | null {
112
+ root.allDefinedTypes.forEach((type) => {
113
+ this.allDefinedTypes.set(type.name, type);
114
+ });
115
+ return super.visitRoot(root);
116
+ }
117
+ }