@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,128 @@
1
+ import { isRefExcluded, createEmptyProtoRef } from '@cosmology/proto-parser';
2
+ import { importNamespace } from '@cosmology/ast';
3
+ import * as dotty from 'dotty';
4
+ import { join, relative, dirname } from 'path';
5
+ import { toPosixPath } from '@cosmology/utils';
6
+ // TODO move to store
7
+ export const getPackages = (store) => {
8
+ return store.getProtos().reduce((m, proto) => {
9
+ if (proto.proto.package) {
10
+ m[proto.proto.package] = m[proto.proto.package] || [];
11
+ m[proto.proto.package].push(proto);
12
+ }
13
+ return m;
14
+ }, {});
15
+ };
16
+ export const getPackagesBundled = (store) => {
17
+ const objectified = {};
18
+ const pkgs = getPackages(store);
19
+ Object.keys(pkgs).forEach(key => {
20
+ if (isRefExcluded(createEmptyProtoRef(key), store.options.prototypes?.excluded))
21
+ return;
22
+ const files = pkgs[key];
23
+ dotty.put(objectified, key, {
24
+ pkg: key,
25
+ files: files.filter(file => {
26
+ return !isRefExcluded(createEmptyProtoRef(key, file.filename), store.options.prototypes?.excluded);
27
+ })
28
+ });
29
+ });
30
+ return objectified;
31
+ };
32
+ export const bundlePackages = (store) => {
33
+ const allPackages = getPackagesBundled(store);
34
+ return Object.keys(allPackages).map(base => {
35
+ const pkgs = allPackages[base];
36
+ const bundleVariables = {};
37
+ const bundleFile = toPosixPath(join(base, 'bundle.ts'));
38
+ const importPaths = [];
39
+ parsePackage(store.options, pkgs, bundleFile, importPaths, bundleVariables);
40
+ return {
41
+ bundleVariables,
42
+ bundleFile,
43
+ importPaths,
44
+ base
45
+ };
46
+ });
47
+ };
48
+ // TODO review bundle registry methods
49
+ export const bundleRegistries = (telescope) => {
50
+ const withMutations = telescope.contexts.filter(ctx => ctx.mutations.length);
51
+ const obj = withMutations.reduce((m, ctx) => {
52
+ m[ctx.ref.proto.package] = m[ctx.ref.proto.package] ?? [];
53
+ m[ctx.ref.proto.package].push(ctx);
54
+ return m;
55
+ }, {});
56
+ return Object.entries(obj)
57
+ .map(([pkg, serviceProtos]) => {
58
+ return {
59
+ package: pkg,
60
+ contexts: serviceProtos
61
+ };
62
+ });
63
+ };
64
+ export const bundleBaseRegistries = (telescope) => {
65
+ const withMutations = telescope.contexts.filter(ctx => ctx.mutations.length);
66
+ const obj = withMutations.reduce((m, ctx) => {
67
+ const base = ctx.ref.proto.package.split('.')[0];
68
+ m[base] = m[base] ?? {};
69
+ m[base][ctx.ref.proto.package] = m[base][ctx.ref.proto.package] ?? [];
70
+ m[base][ctx.ref.proto.package].push(ctx);
71
+ return m;
72
+ }, {});
73
+ return Object.entries(obj)
74
+ .map(([pkg, withServices]) => {
75
+ const serviceProtos = Object.entries(withServices)
76
+ .map(([pkg, withServices]) => {
77
+ return {
78
+ package: pkg,
79
+ contexts: withServices
80
+ };
81
+ });
82
+ return {
83
+ base: pkg,
84
+ pkgs: serviceProtos
85
+ };
86
+ });
87
+ };
88
+ export const parseContextsForRegistry = (contexts) => {
89
+ return contexts.map((ctx) => {
90
+ const responses = ctx.mutations.map(m => m.response);
91
+ const imports = ctx.mutations.reduce((m, msg) => {
92
+ m[msg.messageImport] = m[msg.messageImport] ?? [];
93
+ m[msg.messageImport].push(msg.message);
94
+ return m;
95
+ }, {});
96
+ return {
97
+ filename: ctx.ref.filename,
98
+ imports,
99
+ objects: ctx.types
100
+ .filter(type => !type.isNested)
101
+ .filter(type => !responses.includes(type.name))
102
+ .map(type => type.name)
103
+ };
104
+ });
105
+ };
106
+ export const parsePackage = (options, obj, bundleFile, importPaths, bundleVariables) => {
107
+ if (!obj)
108
+ return;
109
+ if (obj.pkg && obj.files) {
110
+ obj.files.forEach(file => {
111
+ createFileBundle(options, obj.pkg, file.filename, bundleFile, importPaths, bundleVariables);
112
+ });
113
+ return;
114
+ }
115
+ Object.keys(obj).forEach(mini => {
116
+ parsePackage(options, obj[mini], bundleFile, importPaths, bundleVariables);
117
+ });
118
+ };
119
+ let counter = 0;
120
+ export const createFileBundle = (options, pkg, filename, bundleFile, importPaths, bundleVariables) => {
121
+ let rel = relative(dirname(bundleFile), filename);
122
+ if (!rel.startsWith('.'))
123
+ rel = `./${rel}`;
124
+ const variable = `_${counter++}`;
125
+ importPaths.push(importNamespace(variable, toPosixPath(rel)));
126
+ dotty.put(bundleVariables, pkg + '.__export', true);
127
+ dotty.put(bundleVariables, pkg + '.' + variable, true);
128
+ };
@@ -0,0 +1,96 @@
1
+ import { resolve, join, dirname, relative, extname } from "path";
2
+ import { TelescopeParseContext } from "./build";
3
+ import { createFileBundle } from "./bundle";
4
+ import { writeAstToFile } from "./utils/files";
5
+ import { toPosixPath } from "@cosmology/utils";
6
+ export class Bundler {
7
+ builder;
8
+ contexts = [];
9
+ bundle;
10
+ files;
11
+ converters = [];
12
+ lcdClients = [];
13
+ rpcQueryClients = [];
14
+ rpcMsgClients = [];
15
+ registries = [];
16
+ stateManagers = {};
17
+ constructor(builder, bundle) {
18
+ this.builder = builder;
19
+ this.bundle = bundle;
20
+ this.files = [bundle.bundleFile];
21
+ }
22
+ addStateManagers(type, files) {
23
+ const state = this.stateManagers[type];
24
+ if (!state) {
25
+ this.stateManagers[type] = [];
26
+ }
27
+ [].push.apply(this.stateManagers[type], files);
28
+ this.builder.addStateManagers(type, files);
29
+ }
30
+ addLCDClients(files) {
31
+ [].push.apply(this.lcdClients, files);
32
+ this.builder.addLCDClients(files);
33
+ }
34
+ addRPCQueryClients(files) {
35
+ [].push.apply(this.rpcQueryClients, files);
36
+ this.builder.addRPCQueryClients(files);
37
+ }
38
+ addRPCMsgClients(files) {
39
+ [].push.apply(this.rpcMsgClients, files);
40
+ this.builder.addRPCMsgClients(files);
41
+ }
42
+ addRegistries(files) {
43
+ [].push.apply(this.registries, files);
44
+ this.builder.addRegistries(files);
45
+ }
46
+ addConverters(files) {
47
+ [].push.apply(this.converters, files);
48
+ this.builder.addConverters(files);
49
+ }
50
+ getFreshContext(context) {
51
+ return new TelescopeParseContext(context.ref, context.store, this.builder.options);
52
+ }
53
+ getLocalFilename(ref, suffix) {
54
+ return suffix
55
+ ? ref.filename.replace(/\.proto$/, `.${suffix}.ts`)
56
+ : ref.filename.replace(/\.proto$/, `.ts`);
57
+ }
58
+ getFilename(localname) {
59
+ return resolve(join(this.builder.outPath, localname));
60
+ }
61
+ writeAst(program, filename) {
62
+ writeAstToFile(this.builder.outPath, this.builder.options, program, filename);
63
+ }
64
+ // addToBundle adds the path into the namespaced bundle object
65
+ addToBundle(context, localname) {
66
+ createFileBundle(this.builder.options, context.ref.proto.package, localname, this.bundle.bundleFile, this.bundle.importPaths, this.bundle.bundleVariables);
67
+ }
68
+ addToBundleToPackage(packagename, localname) {
69
+ createFileBundle(this.builder.options, packagename, localname, this.bundle.bundleFile, this.bundle.importPaths, this.bundle.bundleVariables);
70
+ }
71
+ addExportObjToBundle(pkg, localname, exportedIdentifiers, isHelperFunc) {
72
+ if (!this.bundle.exportObjs) {
73
+ this.bundle.exportObjs = [];
74
+ }
75
+ let rel = relative(dirname(this.bundle.bundleFile), localname);
76
+ if (!rel.startsWith("."))
77
+ rel = `./${rel}`;
78
+ rel = toPosixPath(rel);
79
+ rel = rel.replace(extname(rel), "");
80
+ const existing = this.bundle.exportObjs.find((e) => e.localname === localname);
81
+ if (existing) {
82
+ // use Set to avoid duplicates
83
+ existing.exportedIdentifiers = [
84
+ ...new Set([...existing.exportedIdentifiers, ...exportedIdentifiers]),
85
+ ];
86
+ return;
87
+ }
88
+ this.bundle.exportObjs.push({
89
+ localname,
90
+ relativePath: rel,
91
+ exportedIdentifiers: [...new Set(exportedIdentifiers)],
92
+ isHelperFunc,
93
+ pkg,
94
+ });
95
+ }
96
+ }
package/module/cli.js ADDED
@@ -0,0 +1,44 @@
1
+ import { prompt } from './prompt';
2
+ import { Commands as commands } from './cmds';
3
+ import { Contracts as contracts } from './cmds';
4
+ import * as pkg from '../package.json';
5
+ export const cli = async (argv) => {
6
+ if (argv.v || argv.version) {
7
+ console.log(pkg.version);
8
+ return;
9
+ }
10
+ if (argv.contract) {
11
+ const { cmd } = await prompt([
12
+ {
13
+ _: true,
14
+ type: 'fuzzy',
15
+ name: 'cmd',
16
+ message: 'what do you want to do?',
17
+ choices: Object.keys(contracts)
18
+ }
19
+ ], argv);
20
+ if (typeof contracts[cmd] === 'function') {
21
+ await contracts[cmd](argv);
22
+ }
23
+ else {
24
+ console.log('command not found.');
25
+ }
26
+ return;
27
+ }
28
+ console.log(`Telescope ${pkg.version}`);
29
+ const { cmd } = await prompt([
30
+ {
31
+ _: true,
32
+ type: 'fuzzy',
33
+ name: 'cmd',
34
+ message: 'what do you want to do?',
35
+ choices: Object.keys(commands)
36
+ }
37
+ ], argv);
38
+ if (typeof commands[cmd] === 'function') {
39
+ await commands[cmd](argv);
40
+ }
41
+ else {
42
+ console.log('command not found.');
43
+ }
44
+ };
package/module/cmds.js ADDED
@@ -0,0 +1,22 @@
1
+ import _commands_generate from './commands/generate';
2
+ import _commands_install from './commands/install';
3
+ import _commands_download from './commands/download';
4
+ import _commands_transpile from './commands/transpile';
5
+ const Commands = {};
6
+ Commands['generate'] = _commands_generate;
7
+ Commands['install'] = _commands_install;
8
+ Commands['download'] = _commands_download;
9
+ Commands['transpile'] = _commands_transpile;
10
+ export { Commands };
11
+ import _contracts_generate from './contracts/generate';
12
+ import _contracts_install from './contracts/install';
13
+ import _contracts_message_composer from './contracts/message-composer';
14
+ import _contracts_react_query from './contracts/react-query';
15
+ import _contracts_recoil from './contracts/recoil';
16
+ const Contracts = {};
17
+ Contracts['generate'] = _contracts_generate;
18
+ Contracts['install'] = _contracts_install;
19
+ Contracts['message-composer'] = _contracts_message_composer;
20
+ Contracts['react-query'] = _contracts_react_query;
21
+ Contracts['recoil'] = _contracts_recoil;
22
+ export { Contracts };
@@ -0,0 +1,94 @@
1
+ import * as shell from "shelljs";
2
+ import { readFileSync } from "fs";
3
+ import { cloneAll, extractProto } from "../protod/recursive";
4
+ import { removeFolder } from "../protod/utils";
5
+ import deepmerge from "deepmerge";
6
+ import { presetProtoDirMapping } from "../protod/config";
7
+ export default async (argv) => {
8
+ if (!shell.which("git")) {
9
+ shell.echo("Sorry, this script requires git");
10
+ return shell.exit(1);
11
+ }
12
+ let configJson;
13
+ if ('config' in argv || 'git-repo' in argv) {
14
+ const config = Array.isArray(argv["config"])
15
+ ? argv["config"][0]
16
+ : argv["config"];
17
+ if (config) {
18
+ try {
19
+ const configText = readFileSync(config, {
20
+ encoding: "utf8",
21
+ });
22
+ configJson = JSON.parse(configText);
23
+ }
24
+ catch (ex) {
25
+ console.log(ex);
26
+ throw new Error("Must provide a .json file for --config.");
27
+ }
28
+ }
29
+ else {
30
+ configJson = {};
31
+ }
32
+ const gitRepos = Array.isArray(argv["git-repo"])
33
+ ? argv["git-repo"]
34
+ : [argv["git-repo"]];
35
+ if (argv["git-repo"] && gitRepos && gitRepos.length > 0) {
36
+ configJson.repos = gitRepos.map((gitRepo) => {
37
+ const [owner, repo, branch] = gitRepo.split("/");
38
+ if (!owner || !repo) {
39
+ shell.echo("wrong `git-repo` format (i.e. <owner>/<repository> or <owner>/<repository>/<branch>).\n");
40
+ return shell.exit(1);
41
+ }
42
+ return { owner, repo, branch };
43
+ });
44
+ }
45
+ const targets = Array.isArray(argv["targets"])
46
+ ? argv["targets"]
47
+ : argv["targets"]?.split(",");
48
+ if (targets && targets.length > 0) {
49
+ configJson.targets = targets;
50
+ }
51
+ let outDir = Array.isArray(argv["out"]) ? argv["out"][0] : argv["out"];
52
+ if (outDir) {
53
+ configJson.outDir = outDir;
54
+ }
55
+ let sshOpt = argv["ssh"];
56
+ configJson.ssh = configJson.ssh || !!sshOpt;
57
+ }
58
+ else {
59
+ configJson = argv;
60
+ }
61
+ if (!configJson.repos || configJson.repos.length === 0) {
62
+ shell.echo("missing `repos` configuration, you can set through `--git-repo` argument or set repos field in config file.\n");
63
+ return shell.exit(1);
64
+ }
65
+ if (!configJson.targets || configJson.targets.length === 0) {
66
+ shell.echo("there must be 'targets' file patterns.\n");
67
+ shell.exit(1);
68
+ }
69
+ if (!configJson.protoDirMapping) {
70
+ configJson.protoDirMapping = {};
71
+ }
72
+ configJson.protoDirMapping = deepmerge(presetProtoDirMapping, configJson.protoDirMapping);
73
+ if (!configJson.outDir) {
74
+ shell.echo("out directory is not specified, downloading to `proto` folder by default.\n");
75
+ configJson.outDir = "proto";
76
+ }
77
+ if (configJson.deleteTempRepoDir) {
78
+ removeFolder(configJson.tempRepoDir);
79
+ }
80
+ const result = await cloneAll({
81
+ repos: configJson.repos,
82
+ gitModulesDir: "./git-modules",
83
+ ssh: configJson.ssh,
84
+ protoDirMapping: configJson.protoDirMapping,
85
+ });
86
+ if (result) {
87
+ removeFolder(configJson.outDir);
88
+ extractProto({
89
+ sources: result,
90
+ targets: configJson.targets,
91
+ outDir: configJson.outDir,
92
+ });
93
+ }
94
+ };
@@ -0,0 +1,123 @@
1
+ import * as shell from 'shelljs';
2
+ import { prompt } from '../prompt';
3
+ import dargs from 'dargs';
4
+ import { crossGlob as glob } from '@cosmology/utils';
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const repo = 'https://github.com/hyperweb-io/telescope-module-boilerplate.git';
8
+ export default async (argv) => {
9
+ if (!shell.which('git')) {
10
+ shell.echo('Sorry, this script requires git');
11
+ return shell.exit(1);
12
+ }
13
+ let results = {};
14
+ const argsFromCommand = process.argv.slice(2);
15
+ argsFromCommand.forEach((arg, index) => {
16
+ if (arg.startsWith('--')) {
17
+ let key = arg.slice(2).replace(/-/g, '').toUpperCase();
18
+ key = `__${key}__`;
19
+ const value = argsFromCommand[index + 1] && !argsFromCommand[index + 1].startsWith('--') ? argsFromCommand[index + 1] : '';
20
+ if (Array.isArray(value)) {
21
+ results[key] = value.split(',');
22
+ }
23
+ else {
24
+ results[key] = value;
25
+ }
26
+ }
27
+ });
28
+ const { name } = results.__MODULENAME__ ? { name: results.__MODULENAME__ } : await prompt([
29
+ {
30
+ type: 'string',
31
+ name: 'name',
32
+ message: 'Enter your new module name',
33
+ }
34
+ ], argv);
35
+ shell.exec(`git clone ${repo} ${name}`);
36
+ shell.cd(name);
37
+ let questions = JSON.parse(fs.readFileSync(`.questions.json`));
38
+ questions = questions.filter(question => !(question.name in results));
39
+ const fullname = shell
40
+ .exec('git config --global user.name', { silent: true })
41
+ .trim();
42
+ const email = shell
43
+ .exec('git config --global user.email', { silent: true })
44
+ .trim();
45
+ // @__USERNAME__/__MODULENAME__
46
+ // __PACKAGE_IDENTIFIER__
47
+ const args = dargs({
48
+ _: [],
49
+ ...argv,
50
+ __MODULENAME__: name,
51
+ __USERFULLNAME__: fullname,
52
+ __USEREMAIL__: email,
53
+ }, { allowCamelCase: true });
54
+ const answerResults = await prompt(questions, args);
55
+ results = { ...results, answerResults };
56
+ const license = results.__LICENSE__ ?? await prompt([
57
+ {
58
+ name: '__LICENSE__',
59
+ message: 'Which license?',
60
+ choices: ['MIT', 'closed'],
61
+ type: 'list',
62
+ required: true,
63
+ },
64
+ ], []);
65
+ let scopedResults;
66
+ if (results.__ACCESS__ === 'public') {
67
+ if (results.__USENPMSCOPED__ !== undefined) {
68
+ scopedResults = { scoped: true };
69
+ }
70
+ else {
71
+ scopedResults = await prompt([
72
+ {
73
+ type: 'confirm',
74
+ name: 'scoped',
75
+ message: 'use npm scopes?',
76
+ required: true,
77
+ },
78
+ ], []);
79
+ }
80
+ }
81
+ const files = []
82
+ .concat(glob(process.cwd() + '/**/.*'))
83
+ .concat(glob(process.cwd() + '/**/*'));
84
+ for (let i = 0; i < files.length; i++) {
85
+ const templateFile = files[i];
86
+ if (fs.lstatSync(templateFile).isDirectory())
87
+ continue;
88
+ let content = fs.readFileSync(templateFile).toString();
89
+ if (path.basename(templateFile) === 'LICENSE' &&
90
+ license.__LICENSE__ === 'closed') {
91
+ content = `Copyright (c) ${new Date().getFullYear()} __USERFULLNAME__ <__USEREMAIL__> - All Rights Reserved
92
+ Unauthorized copying via any medium is strictly prohibited
93
+ Proprietary and confidential`;
94
+ }
95
+ Object.keys(results).forEach(key => {
96
+ if (/^__/.test(key)) {
97
+ content = content.replace(new RegExp(key, 'g'), results[key]);
98
+ }
99
+ });
100
+ if (results.__ACCESS__ === 'public') {
101
+ if (scopedResults.scoped) {
102
+ content = content.replace(/__PACKAGE_IDENTIFIER__/g, `@${results.__USERNAME__}/${results.__MODULENAME__}`);
103
+ }
104
+ else {
105
+ content = content.replace(/__PACKAGE_IDENTIFIER__/g, `${results.__MODULENAME__}`);
106
+ }
107
+ }
108
+ else {
109
+ content = content.replace(/__PACKAGE_IDENTIFIER__/g, `@${results.__USERNAME__}/${results.__MODULENAME__}`);
110
+ }
111
+ fs.writeFileSync(templateFile, content);
112
+ }
113
+ shell.rm('-rf', '.git');
114
+ shell.rm('-rf', '.questions.json');
115
+ console.log(`
116
+
117
+ |||
118
+ (o o)
119
+ ooO--(_)--Ooo-
120
+
121
+ ✨ Great work!
122
+ `);
123
+ };
@@ -0,0 +1,141 @@
1
+ import { resolve, join, dirname, basename, extname } from 'path';
2
+ import { mkdirp } from 'mkdirp';
3
+ import { crossGlob as glob } from '@cosmology/utils';
4
+ import { rimrafSync as rimraf } from 'rimraf';
5
+ import { exec } from 'shelljs';
6
+ import { prompt } from '../prompt';
7
+ import { parse } from 'parse-package-name';
8
+ import { tmpdir } from 'os';
9
+ import { readFileSync, writeFileSync } from 'fs';
10
+ const TMPDIR = tmpdir();
11
+ const rnd = () => Math.random().toString(36).substring(2, 15) +
12
+ Math.random().toString(36).substring(2, 15);
13
+ const getPackages = (names) => {
14
+ return names.map(pkg => {
15
+ const { name, version } = parse(pkg);
16
+ return `${name}@${version}`;
17
+ }).join(' ');
18
+ };
19
+ export default async (argv) => {
20
+ // don't prompt if we got this...
21
+ if (argv._.length) {
22
+ argv.pkg = argv._;
23
+ }
24
+ // current dir/package
25
+ const cur = process.cwd();
26
+ let thisPackage;
27
+ try {
28
+ thisPackage = JSON.parse(readFileSync(join(cur, 'package.json'), 'utf-8'));
29
+ }
30
+ catch (e) {
31
+ throw new Error('make sure you are inside of a telescope package!');
32
+ }
33
+ // what are we installing?
34
+ let { pkg } = await prompt([
35
+ {
36
+ type: 'checkbox',
37
+ name: 'pkg',
38
+ message: 'which packages do you want to support?',
39
+ choices: [
40
+ 'amino',
41
+ 'akash',
42
+ // 'axelar',
43
+ 'bcna',
44
+ // 'bitsong', // Error: namespace and package not supported, yet.
45
+ // 'canto',
46
+ // 'cht',
47
+ 'comdex',
48
+ 'confio',
49
+ 'cosmos',
50
+ 'cosmos_proto',
51
+ 'cosmwasm',
52
+ // 'cronos',
53
+ // 'cyber',
54
+ // 'desmos',
55
+ // 'echelon',
56
+ // 'em',
57
+ // 'eve',
58
+ // 'evmos',
59
+ // 'galaxy',
60
+ 'gogoproto',
61
+ 'google',
62
+ 'ibc',
63
+ 'injective',
64
+ 'juno',
65
+ // 'kava',
66
+ // 'likechain',
67
+ // 'lumenx',
68
+ 'omniflix',
69
+ // 'oracle',
70
+ 'osmosis',
71
+ // 'panacea',
72
+ 'passage3d',
73
+ 'persistence',
74
+ // 'provenance',
75
+ // 'pylons',
76
+ 'regen',
77
+ // 'scavenge',
78
+ // 'sentinel',
79
+ // 'shentu',
80
+ // 'sifnode',
81
+ 'stargaze',
82
+ 'tendermint',
83
+ 'umee',
84
+ // 'uptake',
85
+ // 'vidulum',
86
+ ].map(name => {
87
+ return {
88
+ name,
89
+ value: `@protobufs/${name}`
90
+ };
91
+ })
92
+ }
93
+ ], argv);
94
+ // install
95
+ if (!Array.isArray(pkg))
96
+ pkg = [pkg];
97
+ const tmp = join(TMPDIR, rnd());
98
+ mkdirp.sync(tmp);
99
+ process.chdir(tmp);
100
+ exec(`npm install ${getPackages(pkg)} --production --prefix ./protobufs`);
101
+ // protos
102
+ const pkgs = glob('./protobufs/**/package.json');
103
+ const cmds = pkgs
104
+ .filter((f) => { return f !== './protobufs/package.json'; })
105
+ .map((f) => resolve(join(tmp, f)))
106
+ .map((conf) => {
107
+ const extDir = dirname(conf);
108
+ const dir = extDir.split('node_modules/')[1];
109
+ const dst = basename(dir);
110
+ const files = glob(`${extDir}/**/*`, { nodir: true });
111
+ files.forEach(f => {
112
+ if (extname(f) === '.proto'
113
+ || f === 'package.json'
114
+ || /license/i.test(f)
115
+ || /readme/i.test(f))
116
+ return;
117
+ rimraf(f);
118
+ });
119
+ return [extDir, resolve(join(cur, 'proto', dst)), dir];
120
+ });
121
+ // move protos
122
+ for (const [src, dst, pkg] of cmds) {
123
+ rimraf(dst);
124
+ console.log(`installing ${pkg}...`);
125
+ mkdirp.sync(dirname(dst));
126
+ exec(`mv ${src} ${dst}`);
127
+ }
128
+ // package
129
+ const packageInfo = JSON.parse(readFileSync('./protobufs/package.json', 'utf-8'));
130
+ const deps = packageInfo.dependencies ?? {};
131
+ thisPackage.devDependencies = thisPackage.devDependencies ?? {};
132
+ thisPackage.devDependencies = {
133
+ ...thisPackage.devDependencies,
134
+ ...deps
135
+ };
136
+ thisPackage.devDependencies = Object.fromEntries(Object.entries(thisPackage.devDependencies).sort());
137
+ writeFileSync(join(cur, 'package.json'), JSON.stringify(thisPackage, null, 2));
138
+ // cleanup
139
+ rimraf(tmp);
140
+ process.chdir(cur);
141
+ };