@hyperweb/telescope 1.15.0

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 (382) hide show
  1. package/README.md +1529 -0
  2. package/main/build.js +183 -0
  3. package/main/builder.js +229 -0
  4. package/main/bundle.js +162 -0
  5. package/main/bundler.js +100 -0
  6. package/main/cli.js +71 -0
  7. package/main/cmds.js +28 -0
  8. package/main/commands/download.js +122 -0
  9. package/main/commands/generate.js +151 -0
  10. package/main/commands/install.js +143 -0
  11. package/main/commands/transpile.js +197 -0
  12. package/main/contracts/generate.js +31 -0
  13. package/main/contracts/install.js +107 -0
  14. package/main/contracts/message-composer.js +31 -0
  15. package/main/contracts/react-query.js +31 -0
  16. package/main/contracts/recoil.js +31 -0
  17. package/main/file.js +20 -0
  18. package/main/generators/create-aggregated-lcd-client.js +87 -0
  19. package/main/generators/create-all-stargate-clients.js +96 -0
  20. package/main/generators/create-amino-converters.js +43 -0
  21. package/main/generators/create-bundle.js +83 -0
  22. package/main/generators/create-cosmwasm-bundle.js +15 -0
  23. package/main/generators/create-custom-stargate-clients.js +100 -0
  24. package/main/generators/create-helpers.js +119 -0
  25. package/main/generators/create-index.js +75 -0
  26. package/main/generators/create-lcd-client-all.js +116 -0
  27. package/main/generators/create-lcd-client-scoped.js +89 -0
  28. package/main/generators/create-lcd-clients.js +78 -0
  29. package/main/generators/create-mcp-server.js +1853 -0
  30. package/main/generators/create-mobx-bundle.js +52 -0
  31. package/main/generators/create-msg-funcs.js +132 -0
  32. package/main/generators/create-pinia-store-bundle.js +50 -0
  33. package/main/generators/create-pinia-store.js +90 -0
  34. package/main/generators/create-query-funcs.js +133 -0
  35. package/main/generators/create-react-query-bundle.js +103 -0
  36. package/main/generators/create-registries.js +49 -0
  37. package/main/generators/create-root-readme.js +259 -0
  38. package/main/generators/create-rpc-msg-client-all.js +135 -0
  39. package/main/generators/create-rpc-msg-client-scoped.js +114 -0
  40. package/main/generators/create-rpc-msg-clients.js +116 -0
  41. package/main/generators/create-rpc-ops-bundle.js +119 -0
  42. package/main/generators/create-rpc-query-client-all.js +137 -0
  43. package/main/generators/create-rpc-query-client-scoped.js +110 -0
  44. package/main/generators/create-rpc-query-clients.js +198 -0
  45. package/main/generators/create-sdk-module-stargate-clients.js +95 -0
  46. package/main/generators/create-stargate-clients.js +96 -0
  47. package/main/generators/create-types.js +164 -0
  48. package/main/generators/customize-utils.js +50 -0
  49. package/main/helpers/__test__/internalTimestamp.js +49 -0
  50. package/main/helpers/__test__/internalTimestampBigint.js +45 -0
  51. package/main/helpers/binary-coder.js +535 -0
  52. package/main/helpers/decimals.js +111 -0
  53. package/main/helpers/external-comet.js +52 -0
  54. package/main/helpers/external-icjs.js +36 -0
  55. package/main/helpers/external.js +31 -0
  56. package/main/helpers/grpc-gateway.js +348 -0
  57. package/main/helpers/grpc-web.js +14 -0
  58. package/main/helpers/helper-func-types-interface.js +106 -0
  59. package/main/helpers/helper-func-types.js +93 -0
  60. package/main/helpers/index.js +38 -0
  61. package/main/helpers/internal-for-bigint.js +259 -0
  62. package/main/helpers/internal.js +240 -0
  63. package/main/helpers/json-safe.js +12 -0
  64. package/main/helpers/mobx.js +80 -0
  65. package/main/helpers/pinia-endpoint.js +20 -0
  66. package/main/helpers/react-query-hooks-icjs.js +223 -0
  67. package/main/helpers/react-query-hooks.js +258 -0
  68. package/main/helpers/react-query.js +93 -0
  69. package/main/helpers/registry-helper.js +229 -0
  70. package/main/helpers/types-helper.js +165 -0
  71. package/main/helpers/utf8-helper.js +146 -0
  72. package/main/helpers/varint.js +486 -0
  73. package/main/helpers/vue-query-hooks.js +226 -0
  74. package/main/imports.js +416 -0
  75. package/main/index.js +24 -0
  76. package/main/parse.js +194 -0
  77. package/main/prompt.js +64 -0
  78. package/main/protod/bufbuild.js +87 -0
  79. package/main/protod/config.js +30 -0
  80. package/main/protod/git-repo.js +58 -0
  81. package/main/protod/index.js +17 -0
  82. package/main/protod/recursive.js +134 -0
  83. package/main/protod/types.js +2 -0
  84. package/main/protod/utils.js +91 -0
  85. package/main/telescope.js +10 -0
  86. package/main/types.js +2 -0
  87. package/main/utils/common-create-bundle.js +29 -0
  88. package/main/utils/contracts.js +39 -0
  89. package/main/utils/files.js +138 -0
  90. package/main/utils/index.js +163 -0
  91. package/main/utils/unused.js +73 -0
  92. package/module/build.js +176 -0
  93. package/module/builder.js +222 -0
  94. package/module/bundle.js +128 -0
  95. package/module/bundler.js +96 -0
  96. package/module/cli.js +44 -0
  97. package/module/cmds.js +22 -0
  98. package/module/commands/download.js +94 -0
  99. package/module/commands/generate.js +123 -0
  100. package/module/commands/install.js +141 -0
  101. package/module/commands/transpile.js +169 -0
  102. package/module/contracts/generate.js +29 -0
  103. package/module/contracts/install.js +105 -0
  104. package/module/contracts/message-composer.js +29 -0
  105. package/module/contracts/react-query.js +29 -0
  106. package/module/contracts/recoil.js +29 -0
  107. package/module/file.js +18 -0
  108. package/module/generators/create-aggregated-lcd-client.js +83 -0
  109. package/module/generators/create-all-stargate-clients.js +92 -0
  110. package/module/generators/create-amino-converters.js +39 -0
  111. package/module/generators/create-bundle.js +79 -0
  112. package/module/generators/create-cosmwasm-bundle.js +11 -0
  113. package/module/generators/create-custom-stargate-clients.js +96 -0
  114. package/module/generators/create-helpers.js +112 -0
  115. package/module/generators/create-index.js +45 -0
  116. package/module/generators/create-lcd-client-all.js +89 -0
  117. package/module/generators/create-lcd-client-scoped.js +62 -0
  118. package/module/generators/create-lcd-clients.js +74 -0
  119. package/module/generators/create-mcp-server.js +1849 -0
  120. package/module/generators/create-mobx-bundle.js +25 -0
  121. package/module/generators/create-msg-funcs.js +128 -0
  122. package/module/generators/create-pinia-store-bundle.js +23 -0
  123. package/module/generators/create-pinia-store.js +86 -0
  124. package/module/generators/create-query-funcs.js +129 -0
  125. package/module/generators/create-react-query-bundle.js +76 -0
  126. package/module/generators/create-registries.js +45 -0
  127. package/module/generators/create-root-readme.js +255 -0
  128. package/module/generators/create-rpc-msg-client-all.js +108 -0
  129. package/module/generators/create-rpc-msg-client-scoped.js +87 -0
  130. package/module/generators/create-rpc-msg-clients.js +112 -0
  131. package/module/generators/create-rpc-ops-bundle.js +92 -0
  132. package/module/generators/create-rpc-query-client-all.js +110 -0
  133. package/module/generators/create-rpc-query-client-scoped.js +83 -0
  134. package/module/generators/create-rpc-query-clients.js +198 -0
  135. package/module/generators/create-sdk-module-stargate-clients.js +91 -0
  136. package/module/generators/create-stargate-clients.js +92 -0
  137. package/module/generators/create-types.js +137 -0
  138. package/module/generators/customize-utils.js +46 -0
  139. package/module/helpers/__test__/internalTimestamp.js +39 -0
  140. package/module/helpers/__test__/internalTimestampBigint.js +38 -0
  141. package/module/helpers/binary-coder.js +531 -0
  142. package/module/helpers/decimals.js +108 -0
  143. package/module/helpers/external-comet.js +49 -0
  144. package/module/helpers/external-icjs.js +33 -0
  145. package/module/helpers/external.js +28 -0
  146. package/module/helpers/grpc-gateway.js +345 -0
  147. package/module/helpers/grpc-web.js +11 -0
  148. package/module/helpers/helper-func-types-interface.js +102 -0
  149. package/module/helpers/helper-func-types.js +89 -0
  150. package/module/helpers/index.js +22 -0
  151. package/module/helpers/internal-for-bigint.js +255 -0
  152. package/module/helpers/internal.js +236 -0
  153. package/module/helpers/json-safe.js +9 -0
  154. package/module/helpers/mobx.js +77 -0
  155. package/module/helpers/pinia-endpoint.js +17 -0
  156. package/module/helpers/react-query-hooks-icjs.js +219 -0
  157. package/module/helpers/react-query-hooks.js +254 -0
  158. package/module/helpers/react-query.js +89 -0
  159. package/module/helpers/registry-helper.js +225 -0
  160. package/module/helpers/types-helper.js +161 -0
  161. package/module/helpers/utf8-helper.js +143 -0
  162. package/module/helpers/varint.js +483 -0
  163. package/module/helpers/vue-query-hooks.js +222 -0
  164. package/module/imports.js +382 -0
  165. package/module/index.js +8 -0
  166. package/module/parse.js +185 -0
  167. package/module/prompt.js +58 -0
  168. package/module/protod/bufbuild.js +76 -0
  169. package/module/protod/config.js +27 -0
  170. package/module/protod/git-repo.js +54 -0
  171. package/module/protod/index.js +1 -0
  172. package/module/protod/recursive.js +125 -0
  173. package/module/protod/types.js +1 -0
  174. package/module/protod/utils.js +77 -0
  175. package/module/telescope.js +8 -0
  176. package/module/types.js +1 -0
  177. package/module/utils/common-create-bundle.js +25 -0
  178. package/module/utils/contracts.js +33 -0
  179. package/module/utils/files.js +106 -0
  180. package/module/utils/index.js +143 -0
  181. package/module/utils/unused.js +47 -0
  182. package/package.json +115 -0
  183. package/src/build.ts +255 -0
  184. package/src/builder.ts +302 -0
  185. package/src/bundle.ts +160 -0
  186. package/src/bundler.ts +153 -0
  187. package/src/cli.js +51 -0
  188. package/src/cmds.js +25 -0
  189. package/src/commands/download.ts +120 -0
  190. package/src/commands/generate.ts +156 -0
  191. package/src/commands/install.ts +154 -0
  192. package/src/commands/transpile.ts +198 -0
  193. package/src/contracts/generate.ts +33 -0
  194. package/src/contracts/install.ts +118 -0
  195. package/src/contracts/message-composer.ts +34 -0
  196. package/src/contracts/react-query.ts +33 -0
  197. package/src/contracts/recoil.ts +32 -0
  198. package/src/file.js +20 -0
  199. package/src/generators/create-aggregated-lcd-client.ts +133 -0
  200. package/src/generators/create-all-stargate-clients.ts +121 -0
  201. package/src/generators/create-amino-converters.ts +62 -0
  202. package/src/generators/create-bundle.ts +97 -0
  203. package/src/generators/create-cosmwasm-bundle.ts +17 -0
  204. package/src/generators/create-custom-stargate-clients.ts +128 -0
  205. package/src/generators/create-helpers.ts +196 -0
  206. package/src/generators/create-index.ts +72 -0
  207. package/src/generators/create-lcd-client-all.ts +139 -0
  208. package/src/generators/create-lcd-client-scoped.ts +109 -0
  209. package/src/generators/create-lcd-clients.ts +108 -0
  210. package/src/generators/create-mcp-server.ts +1902 -0
  211. package/src/generators/create-mobx-bundle.ts +31 -0
  212. package/src/generators/create-msg-funcs.ts +219 -0
  213. package/src/generators/create-pinia-store-bundle.ts +35 -0
  214. package/src/generators/create-pinia-store.ts +121 -0
  215. package/src/generators/create-query-funcs.ts +224 -0
  216. package/src/generators/create-react-query-bundle.ts +111 -0
  217. package/src/generators/create-registries.ts +70 -0
  218. package/src/generators/create-root-readme.ts +316 -0
  219. package/src/generators/create-rpc-msg-client-all.ts +167 -0
  220. package/src/generators/create-rpc-msg-client-scoped.ts +147 -0
  221. package/src/generators/create-rpc-msg-clients.ts +165 -0
  222. package/src/generators/create-rpc-ops-bundle.ts +155 -0
  223. package/src/generators/create-rpc-query-client-all.ts +173 -0
  224. package/src/generators/create-rpc-query-client-scoped.ts +142 -0
  225. package/src/generators/create-rpc-query-clients.ts +304 -0
  226. package/src/generators/create-sdk-module-stargate-clients.ts +120 -0
  227. package/src/generators/create-stargate-clients.ts +123 -0
  228. package/src/generators/create-types.ts +236 -0
  229. package/src/generators/customize-utils.ts +54 -0
  230. package/src/helpers/__test__/internalTimestamp.test.ts +79 -0
  231. package/src/helpers/__test__/internalTimestamp.ts +58 -0
  232. package/src/helpers/__test__/internalTimestampBigint.test.ts +78 -0
  233. package/src/helpers/__test__/internalTimestampBigint.ts +58 -0
  234. package/src/helpers/binary-coder.ts +533 -0
  235. package/src/helpers/decimals.ts +108 -0
  236. package/src/helpers/external-comet.ts +49 -0
  237. package/src/helpers/external-icjs.ts +33 -0
  238. package/src/helpers/external.ts +28 -0
  239. package/src/helpers/grpc-gateway.ts +345 -0
  240. package/src/helpers/grpc-web.ts +11 -0
  241. package/src/helpers/helper-func-types-interface.ts +104 -0
  242. package/src/helpers/helper-func-types.ts +91 -0
  243. package/src/helpers/index.ts +22 -0
  244. package/src/helpers/internal-for-bigint.ts +257 -0
  245. package/src/helpers/internal.ts +238 -0
  246. package/src/helpers/json-safe.ts +11 -0
  247. package/src/helpers/mobx.ts +77 -0
  248. package/src/helpers/pinia-endpoint.ts +17 -0
  249. package/src/helpers/react-query-hooks-icjs.ts +223 -0
  250. package/src/helpers/react-query-hooks.ts +266 -0
  251. package/src/helpers/react-query.ts +101 -0
  252. package/src/helpers/registry-helper.ts +227 -0
  253. package/src/helpers/types-helper.ts +169 -0
  254. package/src/helpers/utf8-helper.ts +143 -0
  255. package/src/helpers/varint.ts +483 -0
  256. package/src/helpers/vue-query-hooks.ts +224 -0
  257. package/src/imports.ts +499 -0
  258. package/src/index.ts +12 -0
  259. package/src/parse.ts +243 -0
  260. package/src/prompt.js +65 -0
  261. package/src/protod/bufbuild.spec.ts +80 -0
  262. package/src/protod/bufbuild.ts +95 -0
  263. package/src/protod/config.ts +30 -0
  264. package/src/protod/git-repo.ts +74 -0
  265. package/src/protod/index.ts +1 -0
  266. package/src/protod/recursive.spec.ts +164 -0
  267. package/src/protod/recursive.ts +180 -0
  268. package/src/protod/test-data/.protod.config.json +42 -0
  269. package/src/protod/test-data/buf.lock +23 -0
  270. package/src/protod/test-data/buf.yaml +25 -0
  271. package/src/protod/test-data/buf2.yaml +20 -0
  272. package/src/protod/test-data/cosmos/buf.lock +23 -0
  273. package/src/protod/test-data/cosmos/crypto/secp256k1/keys.proto +38 -0
  274. package/src/protod/test-data/model.proto +101 -0
  275. package/src/protod/types.ts +55 -0
  276. package/src/protod/utils.spec.ts +68 -0
  277. package/src/protod/utils.ts +90 -0
  278. package/src/telescope.js +9 -0
  279. package/src/types.ts +46 -0
  280. package/src/utils/common-create-bundle.ts +62 -0
  281. package/src/utils/contracts.ts +37 -0
  282. package/src/utils/files.ts +145 -0
  283. package/src/utils/index.ts +150 -0
  284. package/src/utils/unused.ts +52 -0
  285. package/types/build.d.ts +41 -0
  286. package/types/builder.d.ts +50 -0
  287. package/types/bundle.d.ts +30 -0
  288. package/types/bundler.d.ts +31 -0
  289. package/types/cli.d.ts +1 -0
  290. package/types/cmds.d.ts +11 -0
  291. package/types/commands/download.d.ts +5 -0
  292. package/types/commands/generate.d.ts +2 -0
  293. package/types/commands/install.d.ts +2 -0
  294. package/types/commands/transpile.d.ts +4 -0
  295. package/types/contracts/generate.d.ts +2 -0
  296. package/types/contracts/install.d.ts +2 -0
  297. package/types/contracts/message-composer.d.ts +2 -0
  298. package/types/contracts/react-query.d.ts +2 -0
  299. package/types/contracts/recoil.d.ts +2 -0
  300. package/types/file.d.ts +2 -0
  301. package/types/generators/create-aggregated-lcd-client.d.ts +2 -0
  302. package/types/generators/create-all-stargate-clients.d.ts +3 -0
  303. package/types/generators/create-amino-converters.d.ts +3 -0
  304. package/types/generators/create-bundle.d.ts +3 -0
  305. package/types/generators/create-combined-stargate-clients.d.ts +3 -0
  306. package/types/generators/create-cosmwasm-bundle.d.ts +2 -0
  307. package/types/generators/create-custom-stargate-clients.d.ts +3 -0
  308. package/types/generators/create-helpers.d.ts +2 -0
  309. package/types/generators/create-index.d.ts +2 -0
  310. package/types/generators/create-lcd-client-all.d.ts +3 -0
  311. package/types/generators/create-lcd-client-scoped.d.ts +3 -0
  312. package/types/generators/create-lcd-clients.d.ts +3 -0
  313. package/types/generators/create-mcp-server.d.ts +3 -0
  314. package/types/generators/create-mobx-bundle.d.ts +2 -0
  315. package/types/generators/create-msg-funcs.d.ts +3 -0
  316. package/types/generators/create-pinia-store-bundle.d.ts +2 -0
  317. package/types/generators/create-pinia-store.d.ts +3 -0
  318. package/types/generators/create-query-funcs.d.ts +3 -0
  319. package/types/generators/create-react-query-bundle.d.ts +2 -0
  320. package/types/generators/create-registries.d.ts +3 -0
  321. package/types/generators/create-root-readme.d.ts +2 -0
  322. package/types/generators/create-rpc-msg-client-all.d.ts +3 -0
  323. package/types/generators/create-rpc-msg-client-scoped.d.ts +3 -0
  324. package/types/generators/create-rpc-msg-clients.d.ts +3 -0
  325. package/types/generators/create-rpc-ops-bundle.d.ts +2 -0
  326. package/types/generators/create-rpc-query-client-all.d.ts +3 -0
  327. package/types/generators/create-rpc-query-client-scoped.d.ts +3 -0
  328. package/types/generators/create-rpc-query-clients.d.ts +3 -0
  329. package/types/generators/create-scoped-stargate-clients.d.ts +3 -0
  330. package/types/generators/create-sdk-module-stargate-clients.d.ts +3 -0
  331. package/types/generators/create-stargate-clients.d.ts +3 -0
  332. package/types/generators/create-types.d.ts +3 -0
  333. package/types/generators/create-unified-stargate-clients.d.ts +3 -0
  334. package/types/generators/customize-utils.d.ts +2 -0
  335. package/types/helpers/__test__/internalTimestamp.d.ts +21 -0
  336. package/types/helpers/__test__/internalTimestampBigint.d.ts +20 -0
  337. package/types/helpers/binary-coder.d.ts +2 -0
  338. package/types/helpers/decimals.d.ts +1 -0
  339. package/types/helpers/external-comet.d.ts +1 -0
  340. package/types/helpers/external-icjs.d.ts +1 -0
  341. package/types/helpers/external.d.ts +1 -0
  342. package/types/helpers/generated-type.d.ts +1 -0
  343. package/types/helpers/grpc-gateway.d.ts +1 -0
  344. package/types/helpers/grpc-web.d.ts +1 -0
  345. package/types/helpers/helper-func-types-interface.d.ts +2 -0
  346. package/types/helpers/helper-func-types.d.ts +2 -0
  347. package/types/helpers/index.d.ts +22 -0
  348. package/types/helpers/internal-for-bigint.d.ts +2 -0
  349. package/types/helpers/internal.d.ts +2 -0
  350. package/types/helpers/internalForBigInt.d.ts +1 -0
  351. package/types/helpers/json-safe.d.ts +1 -0
  352. package/types/helpers/mobx.d.ts +1 -0
  353. package/types/helpers/pinia-endpoint.d.ts +1 -0
  354. package/types/helpers/react-query-hooks-icjs.d.ts +2 -0
  355. package/types/helpers/react-query-hooks.d.ts +2 -0
  356. package/types/helpers/react-query.d.ts +2 -0
  357. package/types/helpers/registry-helper.d.ts +2 -0
  358. package/types/helpers/types-helper.d.ts +2 -0
  359. package/types/helpers/types.d.ts +1 -0
  360. package/types/helpers/utf8-helper.d.ts +1 -0
  361. package/types/helpers/varint.d.ts +1 -0
  362. package/types/helpers/vue-query-hooks.d.ts +2 -0
  363. package/types/helpers/vue-query.d.ts +2 -0
  364. package/types/imports.d.ts +17 -0
  365. package/types/index.d.ts +6 -0
  366. package/types/parse.d.ts +15 -0
  367. package/types/prompt.d.ts +3 -0
  368. package/types/protod/bufbuild.d.ts +6 -0
  369. package/types/protod/config.d.ts +7 -0
  370. package/types/protod/git-repo.d.ts +11 -0
  371. package/types/protod/index.d.ts +1 -0
  372. package/types/protod/proto-download.d.ts +2 -0
  373. package/types/protod/recursive.d.ts +4 -0
  374. package/types/protod/types.d.ts +49 -0
  375. package/types/protod/utils.d.ts +11 -0
  376. package/types/telescope.d.ts +2 -0
  377. package/types/types.d.ts +43 -0
  378. package/types/utils/common-create-bundle.d.ts +18 -0
  379. package/types/utils/contracts.d.ts +6 -0
  380. package/types/utils/files.d.ts +5 -0
  381. package/types/utils/index.d.ts +16 -0
  382. package/types/utils/unused.d.ts +5 -0
@@ -0,0 +1,147 @@
1
+ import * as dotty from 'dotty';
2
+ import { createEmptyProtoRef, getNestedProto } from '@cosmology/proto-parser';
3
+ import { join } from 'path';
4
+ import { TelescopeBuilder } from '../builder';
5
+ import { createScopedRpcFactory, createScopedGrpcWebMsgFactory, createRpcMsgExtension, importStmt } from '@cosmology/ast';
6
+ import { ProtoRef } from '@cosmology/types';
7
+ import { fixlocalpaths, getRelativePath } from '../utils';
8
+ import { Bundler } from '../bundler';
9
+ import { aggregateImports, getDepsFromQueries, getImportStatements } from '../imports';
10
+ import { TelescopeParseContext } from '../build';
11
+ import { pascal } from 'case';
12
+
13
+ export const plugin = (
14
+ builder: TelescopeBuilder,
15
+ bundler: Bundler
16
+ ) => {
17
+ // if not enabled, exit
18
+ if (!builder.options?.rpcClients?.enabled) {
19
+ return;
20
+ }
21
+
22
+ if (builder.options?.rpcClients?.inline) {
23
+ return;
24
+ }
25
+
26
+ // we have scopes!
27
+ builder.options.rpcClients.scoped?.forEach(rpc => {
28
+ if (rpc.dir !== bundler.bundle.base) return;
29
+ makeRPC(
30
+ builder,
31
+ bundler,
32
+ rpc
33
+ );
34
+ });
35
+ };
36
+
37
+ const getFileName = (dir, filename) => {
38
+ filename = filename.replace(/\.ts$/, '');
39
+ const localname = join(dir, filename + '.tx');
40
+ return localname + '.ts';
41
+ };
42
+
43
+ const makeRPC = (
44
+ builder: TelescopeBuilder,
45
+ bundler: Bundler,
46
+ rpc: {
47
+ dir: string;
48
+ filename?: string;
49
+ packages: string[];
50
+ addToBundle: boolean;
51
+ methodNameQuery?: string;
52
+ methodNameTx?: string;
53
+ isAll?: boolean;
54
+ }
55
+ ) => {
56
+ const dir = rpc.dir;
57
+ const packages = rpc.packages;
58
+ const methodName = rpc.methodNameTx ?? 'createRPCMsgClient'
59
+ const localname = getFileName(dir, rpc.filename ?? 'rpc');
60
+
61
+ const obj = {};
62
+ builder.rpcMsgClients.forEach(file => {
63
+
64
+ // ADD all option
65
+ // which defaults to including cosmos
66
+ // and defaults to base for each
67
+ if (!packages.includes(file.package)) {
68
+ return;
69
+ }
70
+
71
+ const f = localname;
72
+ const f2 = file.localname;
73
+ const importPath = getRelativePath(f, f2);
74
+ dotty.put(obj, file.package, importPath);
75
+ });
76
+
77
+ const ctx = new TelescopeParseContext(
78
+ createEmptyProtoRef(dir, localname),
79
+ builder.store,
80
+ builder.options
81
+ );
82
+
83
+ let rpcast;
84
+ let msgExt: any = [];
85
+ let txRpcImport: any = [];
86
+ switch (builder.options?.rpcClients?.type) {
87
+ case "grpc-gateway":
88
+ // TODO no working scoped clients for grpc-gateway right now
89
+ case "tendermint":
90
+ // TODO add addUtil to generic context
91
+ ctx.proto.addUtil('Rpc');
92
+
93
+ rpcast = createScopedRpcFactory(
94
+ obj,
95
+ methodName,
96
+ 'MsgClientImpl', // make option later,
97
+ ctx.options
98
+ );
99
+
100
+ if(rpc.isAll && ctx.proto.pluginValue('env') === 'v-next' && ctx.proto.pluginValue('rpcClients.extensions') && ctx.proto.pluginValue('stargateClients.addGetTxRpc')) {
101
+ const txRpcName = 'getSigning' + pascal(bundler.bundle.base + 'TxRpc');
102
+
103
+ txRpcImport = importStmt([txRpcName], `./client${ctx.options.restoreImportExtension ?? ""}`)
104
+
105
+ msgExt = createRpcMsgExtension(ctx.proto, txRpcName);
106
+ }
107
+ break;
108
+ case "grpc-web":
109
+ ctx.proto.addUtil('grpc');
110
+ ctx.proto.addUtil('NodeHttpTransport');
111
+
112
+ rpcast = createScopedGrpcWebMsgFactory(
113
+ obj,
114
+ methodName,
115
+ 'MsgClientImpl', // make option later,
116
+ ctx.options
117
+ );
118
+ break;
119
+ default:
120
+ break;
121
+ }
122
+
123
+ const serviceImports = getDepsFromQueries(
124
+ ctx.queries,
125
+ localname
126
+ );
127
+
128
+ const imports = aggregateImports(ctx, serviceImports, localname);
129
+
130
+ const importStmts = getImportStatements(
131
+ localname,
132
+ [...fixlocalpaths(imports)],
133
+ builder.options
134
+ );
135
+
136
+ const prog = []
137
+ .concat(txRpcImport)
138
+ .concat(importStmts)
139
+ .concat(rpcast)
140
+ .concat(msgExt);
141
+
142
+ const filename = bundler.getFilename(localname);
143
+ bundler.writeAst(prog, filename);
144
+ if (rpc.addToBundle) {
145
+ bundler.addToBundleToPackage(`${dir}.ClientFactory`, localname)
146
+ }
147
+ };
@@ -0,0 +1,165 @@
1
+ import { buildAllImports, getDepsFromQueries } from '../imports';
2
+ import { Bundler } from '../bundler';
3
+ import { createRpcClientClass, createRpcClientInterface, createGRPCGatewayMsgClass, GetDesc, getMethodDesc, grpcWebRpcInterface, createGrpcWebMsgInterface, createGrpcWebMsgClass, getGrpcWebImpl, createRpcClientImpl } from '@cosmology/ast';
4
+ import { getNestedProto } from '@cosmology/proto-parser';
5
+ import { parse } from '../parse';
6
+ import { TelescopeBuilder } from '../builder';
7
+ import { camel, getQueryMethodNames, swapKeyValue } from '@cosmology/utils';
8
+ import { BundlerFile } from 'src/types';
9
+
10
+ export const plugin = (
11
+ builder: TelescopeBuilder,
12
+ bundler: Bundler
13
+ ) => {
14
+ // if (!builder.options.rpcClients.enabled) {
15
+ // return;
16
+ // }
17
+ const instantRpcBundlerFiles: {
18
+ [key: string]: BundlerFile[]
19
+ } = {};
20
+
21
+ const mutationContexts = bundler
22
+ .contexts
23
+ .filter(context => context.mutations.length > 0);
24
+
25
+ const clients = mutationContexts.map(c => {
26
+
27
+ const enabled = c.proto.pluginValue('rpcClients.enabled');
28
+ if (!enabled) return;
29
+
30
+ const inline = c.proto.pluginValue('rpcClients.inline');
31
+ if (inline) return;
32
+
33
+ if (c.proto.isExcluded()) return;
34
+
35
+ const useCamelCase = c.proto.pluginValue("rpcClients.camelCase");
36
+
37
+ const localname = bundler.getLocalFilename(c.ref, 'rpc.msg');
38
+ const filename = bundler.getFilename(localname);
39
+ const ctx = bundler.getFreshContext(c);
40
+
41
+ // get mutations, services
42
+ parse(ctx);
43
+
44
+ const proto = getNestedProto(c.ref.traversed);
45
+ // hard-coding, for now, only Msg service
46
+ if (!proto?.Msg || proto.Msg?.type !== 'Service') {
47
+ return;
48
+ }
49
+
50
+ ////////
51
+ const asts = [];
52
+ const bundlerFile: BundlerFile = {
53
+ proto: c.ref.filename,
54
+ package: c.ref.proto.package,
55
+ localname,
56
+ filename,
57
+ isMsg: true
58
+ };
59
+ switch (c.proto.pluginValue("rpcClients.type")) {
60
+ case 'grpc-gateway':
61
+ asts.push(createGRPCGatewayMsgClass(ctx.generic, proto.Msg))
62
+ break;
63
+ case 'grpc-web':
64
+ asts.push(createGrpcWebMsgInterface(ctx.generic, proto.Msg))
65
+ asts.push(createGrpcWebMsgClass(ctx.generic, proto.Msg))
66
+ asts.push(GetDesc(ctx.generic, proto.Msg))
67
+ const Desces = getMethodDesc(ctx.generic, proto.Msg);
68
+ for (let i = 0; i < Desces.length; i++) {
69
+ const element = Desces[i];
70
+ asts.push(element);
71
+ }
72
+ asts.push(grpcWebRpcInterface())
73
+ asts.push(getGrpcWebImpl(ctx.generic))
74
+ break;
75
+ case 'tendermint':
76
+ default:
77
+ asts.push(createRpcClientInterface(ctx.generic, proto.Msg))
78
+
79
+ const svc = proto.Msg;
80
+ const instantOps = c.options.rpcClients?.instantOps ?? [];
81
+
82
+ instantOps.forEach((item) => {
83
+ let nameMapping = {
84
+ ...swapKeyValue(item.nameMapping?.All ?? {}),
85
+ ...swapKeyValue(item.nameMapping?.Msg ?? {})
86
+ };
87
+
88
+ // get all query methods
89
+ const patterns = item.include?.patterns;
90
+ const serviceTypes = item.include?.serviceTypes;
91
+
92
+ if(serviceTypes && !serviceTypes.includes("Tx")){
93
+ return
94
+ }
95
+
96
+ const methodKeys = getQueryMethodNames(
97
+ bundlerFile.package,
98
+ Object.keys(svc.methods ?? {}),
99
+ patterns,
100
+ useCamelCase ? camel : String
101
+ );
102
+
103
+ if(!methodKeys || !methodKeys.length){
104
+ return
105
+ }
106
+
107
+ asts.push(
108
+ createRpcClientInterface(
109
+ ctx.generic,
110
+ svc,
111
+ item.className,
112
+ methodKeys,
113
+ nameMapping
114
+ )
115
+ );
116
+
117
+ bundlerFile.instantExportedMethods = methodKeys.map((key) => svc.methods[key]);
118
+
119
+ if(!instantRpcBundlerFiles[item.className]){
120
+ instantRpcBundlerFiles[item.className] = [];
121
+ }
122
+
123
+ instantRpcBundlerFiles[item.className].push({...bundlerFile});
124
+ });
125
+
126
+ asts.push(createRpcClientClass(ctx.generic, proto.Msg))
127
+
128
+ const env = c.proto.pluginValue('env');
129
+ if(env === 'v-next'){
130
+ asts.push(createRpcClientImpl(ctx.generic, svc));
131
+ }
132
+ }
133
+
134
+ ////////
135
+
136
+ const serviceImports = getDepsFromQueries(
137
+ ctx.mutations,
138
+ localname
139
+ );
140
+
141
+ // TODO we do NOT need all imports...
142
+ const imports = buildAllImports(ctx, serviceImports, localname);
143
+ const prog = []
144
+ .concat(imports)
145
+ .concat(ctx.body)
146
+ .concat(asts);
147
+
148
+
149
+ bundler.writeAst(prog, filename);
150
+ bundler.addToBundle(c, localname);
151
+
152
+ return {
153
+ package: c.ref.proto.package,
154
+ localname,
155
+ filename
156
+ };
157
+
158
+ }).filter(Boolean);
159
+
160
+ bundler.addRPCMsgClients(clients);
161
+
162
+ Object.keys(instantRpcBundlerFiles).forEach((className)=>{
163
+ bundler.addStateManagers(`instantRpc_${className}`, instantRpcBundlerFiles[className]);
164
+ })
165
+ };
@@ -0,0 +1,155 @@
1
+ import { aggregateImports, getImportStatements } from "../imports";
2
+ import { join, dirname, extname, basename } from "path";
3
+ import { TelescopeBuilder } from "../builder";
4
+ import {
5
+ createInstantRpcInterface,
6
+ createInstantRpcClass,
7
+ } from "@cosmology/ast";
8
+ import { ImportUsage, ProtoRef } from "@cosmology/types";
9
+ import { TelescopeParseContext } from "../build";
10
+ import { writeAstToFile } from "../utils/files";
11
+ import { fixlocalpaths } from "../utils";
12
+ import * as dotty from "dotty";
13
+ import { createEmptyProtoRef } from "@cosmology/proto-parser";
14
+ import { camel, makeUseHookName, makeUsePkgHookName } from "@cosmology/utils";
15
+ import { variableSlug } from "@cosmology/utils";
16
+ import { swapKeyValue } from "@cosmology/utils";
17
+ import { buildImports } from "@cosmology/utils";
18
+ import { BundlerFile } from "src/types";
19
+
20
+ export const plugin = (builder: TelescopeBuilder) => {
21
+ if (
22
+ !builder.options.rpcClients?.enabled ||
23
+ !builder.options.rpcClients?.instantOps?.length
24
+ ) {
25
+ return;
26
+ }
27
+
28
+ const localname = "service-ops.ts";
29
+
30
+ // get mapping of packages and rpc query filenames.
31
+ // create proto ref for context
32
+ const pkg = "@root";
33
+ const ref: ProtoRef = createEmptyProtoRef(pkg, localname);
34
+
35
+ // create context
36
+ const context = new TelescopeParseContext(
37
+ ref,
38
+ builder.store,
39
+ builder.options
40
+ );
41
+
42
+ const pkgImports = [];
43
+
44
+ const ast = builder.options.rpcClients!.instantOps!.reduce(
45
+ (ast, instantOpsConfig) => {
46
+ const bundlerFiles =
47
+ builder.stateManagers[`instantRpc_${instantOpsConfig.className}`];
48
+
49
+ if (!bundlerFiles || !bundlerFiles.length) {
50
+ return ast;
51
+ }
52
+ let nameMapping = instantOpsConfig.nameMapping;
53
+
54
+ return ast.concat(
55
+ createRpcOpsAst(
56
+ context,
57
+ instantOpsConfig.className,
58
+ pkgImports,
59
+ nameMapping,
60
+ bundlerFiles
61
+ )
62
+ );
63
+ },
64
+ []
65
+ );
66
+
67
+ // generate imports added by context.addUtil
68
+ const imports = fixlocalpaths(aggregateImports(context, {}, localname));
69
+ const importStmts = getImportStatements(localname, imports, builder.options);
70
+
71
+ // construct the AST
72
+ const prog = [].concat(importStmts).concat(buildImports(pkgImports)).concat(ast);
73
+
74
+ // write the file.
75
+ const filename = join(builder.outPath, localname);
76
+ builder.files.push(localname);
77
+
78
+ writeAstToFile(builder.outPath, builder.options, prog, filename);
79
+ };
80
+
81
+ // bundlerFiles.filter(file => file.localname.indexOf("rpc.msg") !== -1)
82
+
83
+ function createRpcOpsAst(
84
+ context: TelescopeParseContext,
85
+ className: string,
86
+ pkgImports: ImportUsage[],
87
+ nameMapping,
88
+ bundlerFiles: BundlerFile[]
89
+ ) {
90
+ const extendInterfaces = [];
91
+ const instantMapping: {
92
+ [key: string]: {
93
+ methodName: string;
94
+ importedVarName: string;
95
+ comment?: string | undefined;
96
+ };
97
+ } = {};
98
+ const camelRpcMethods = context.generic.pluginValue("rpcClients.camelCase");
99
+
100
+
101
+ let txNameMapping = {
102
+ ...swapKeyValue(nameMapping?.All ?? {}),
103
+ ...swapKeyValue(nameMapping?.Msg ?? {})
104
+ };
105
+
106
+ let queryNameMapping = {
107
+ ...swapKeyValue(nameMapping?.All ?? {}),
108
+ ...swapKeyValue(nameMapping?.Query ?? {})
109
+ };
110
+
111
+ bundlerFiles.forEach((bundlerFile) => {
112
+ const isMsg = bundlerFile.isMsg;
113
+ const currentNameMapping = isMsg ? txNameMapping : queryNameMapping;
114
+
115
+ const path = `./${bundlerFile.localname.replace(/\.ts$/, "")}`;
116
+ const importedVarName = variableSlug(path);
117
+
118
+ if (
119
+ pkgImports &&
120
+ !pkgImports.some((item) => item.importedAs === importedVarName)
121
+ ) {
122
+ pkgImports.push({
123
+ type: "typeImport",
124
+ name: importedVarName,
125
+ import: path,
126
+ importedAs: importedVarName,
127
+ });
128
+ }
129
+
130
+ extendInterfaces.push({
131
+ importedVarName: importedVarName,
132
+ interfaceName: className,
133
+ });
134
+
135
+ bundlerFile.instantExportedMethods?.forEach((method) => {
136
+ const methodName = camelRpcMethods ? camel(method.name) : method.name;
137
+ const nameWithPkg = `${bundlerFile.package}.${methodName}`;
138
+ const methodAlias =
139
+ currentNameMapping && currentNameMapping[nameWithPkg]
140
+ ? currentNameMapping[nameWithPkg]
141
+ : methodName;
142
+
143
+ dotty.put(instantMapping, methodAlias, {
144
+ methodName,
145
+ importedVarName,
146
+ isMsg
147
+ });
148
+ });
149
+ });
150
+
151
+ return [
152
+ createInstantRpcInterface(className, extendInterfaces),
153
+ createInstantRpcClass(context.generic, className, instantMapping),
154
+ ];
155
+ }
@@ -0,0 +1,173 @@
1
+ import * as dotty from 'dotty';
2
+ import { getNestedProto, isRefIncluded, createEmptyProtoRef } from '@cosmology/proto-parser';
3
+ import { join } from 'path';
4
+ import { TelescopeBuilder } from '../builder';
5
+ import { createScopedRpcTmFactory, createScopedGrpcWebFactory, createScopedGrpcGatewayFactory } from '@cosmology/ast';
6
+ import { ProtoRef } from '@cosmology/types';
7
+ import { fixlocalpaths, getRelativePath } from '../utils';
8
+ import { Bundler } from '../bundler';
9
+ import { TelescopeParseContext } from '../build';
10
+ import { aggregateImports, getDepsFromQueries, getImportStatements } from '../imports';
11
+
12
+ export const plugin = (
13
+ builder: TelescopeBuilder,
14
+ bundler: Bundler
15
+ ) => {
16
+ // if not enabled, exit
17
+ if (!builder.options?.rpcClients?.enabled) {
18
+ return;
19
+ }
20
+
21
+ if (builder.options?.rpcClients?.inline) {
22
+ return;
23
+ }
24
+
25
+ // if no scopes, do them all!
26
+ if (
27
+ !builder.options.rpcClients.scoped ||
28
+ !builder.options.rpcClients.scoped.length ||
29
+ !builder.options.rpcClients.scopedIsExclusive
30
+ ) {
31
+ return makeAllRPCBundles(
32
+ builder,
33
+ bundler
34
+ );
35
+ }
36
+
37
+ };
38
+
39
+ const getFileName = (dir, filename) => {
40
+ filename = filename.replace(/\.ts$/, '');
41
+ const localname = join(dir, filename + '.query');
42
+ return localname + '.ts';
43
+ };
44
+
45
+ const makeAllRPCBundles = (
46
+ builder: TelescopeBuilder,
47
+ bundler: Bundler
48
+ ) => {
49
+
50
+ if (!builder.options.rpcClients.bundle) return;
51
+
52
+ const dir = bundler.bundle.base;
53
+ const filename = 'rpc'
54
+
55
+ // refs with services
56
+ const refs = builder.store.getProtos().filter((ref: ProtoRef) => {
57
+ const proto = getNestedProto(ref.traversed);
58
+
59
+ //// Anything except Msg Service OK...
60
+ const allowedRpcServices = builder.options.rpcClients.enabledServices.filter(a => a !== 'Msg');
61
+ const found = allowedRpcServices.some(svc => {
62
+ return proto?.[svc] &&
63
+ proto[svc]?.type === 'Service'
64
+ });
65
+
66
+ if (!found) {
67
+ return;
68
+ }
69
+
70
+ return true;
71
+ });
72
+
73
+ const check = refs.filter((ref: ProtoRef) => {
74
+ const [base] = ref.proto.package.split('.');
75
+ return base === bundler.bundle.base;
76
+ });
77
+
78
+ if (!check.length) {
79
+ // if there are no services
80
+ // exit the plugin
81
+ return;
82
+ }
83
+
84
+ const packages = refs.reduce((m, ref: ProtoRef) => {
85
+ const [base] = ref.proto.package.split('.');
86
+ if (base === 'cosmos' || base === bundler.bundle.base)
87
+ return [...new Set([...m, ref.proto.package])];
88
+ return m;
89
+ }, []);
90
+
91
+ const methodName = 'createRPCQueryClient'
92
+ const localname = getFileName(dir, filename ?? 'rpc');
93
+
94
+ const obj = {};
95
+ builder.rpcQueryClients.forEach(file => {
96
+
97
+ // ADD all option
98
+ // which defaults to including cosmos
99
+ // and defaults to base for each
100
+ if (!isRefIncluded(createEmptyProtoRef(file.package, file.proto), {
101
+ packages,
102
+ })) {
103
+ return;
104
+ }
105
+
106
+ const f = localname;
107
+ const f2 = file.localname;
108
+ const importPath = getRelativePath(f, f2);
109
+ dotty.put(obj, file.package, importPath);
110
+ });
111
+
112
+ const ctx = new TelescopeParseContext(
113
+ createEmptyProtoRef(dir, localname),
114
+ builder.store,
115
+ builder.options
116
+ );
117
+ //based on rpc type to generate client from client factory
118
+ let rpcast;
119
+
120
+ switch (builder.options?.rpcClients?.type) {
121
+ case "grpc-gateway":
122
+ rpcast = createScopedGrpcGatewayFactory(
123
+ ctx.proto,
124
+ obj,
125
+ "createGrpcGateWayClient"
126
+ // 'QueryClientImpl' // make option later
127
+ );
128
+ break;
129
+ case "tendermint":
130
+ // TODO add addUtil to generic context
131
+ ctx.proto.addUtil('Rpc');
132
+
133
+ rpcast = createScopedRpcTmFactory(
134
+ ctx.proto,
135
+ obj,
136
+ methodName
137
+ // 'QueryClientImpl' // make option later
138
+ );
139
+ break;
140
+ case "grpc-web":
141
+ rpcast = createScopedGrpcWebFactory(
142
+ ctx.proto,
143
+ obj,
144
+ "createGrpcWebClient"
145
+ );
146
+ break;
147
+ default:
148
+ break;
149
+ }
150
+
151
+
152
+ const serviceImports = getDepsFromQueries(
153
+ ctx.queries,
154
+ localname
155
+ );
156
+
157
+ const imports = aggregateImports(ctx, serviceImports, localname);
158
+
159
+ const importStmts = getImportStatements(
160
+ localname,
161
+ [...fixlocalpaths(imports)],
162
+ builder.options
163
+ );
164
+
165
+ const prog = []
166
+ .concat(importStmts)
167
+ .concat(rpcast);
168
+
169
+ const writeFilename = bundler.getFilename(localname);
170
+ bundler.writeAst(prog, writeFilename);
171
+ bundler.addToBundleToPackage(`${dir}.ClientFactory`, localname)
172
+
173
+ };