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