@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,111 @@
1
+ import { aggregateImports, getImportStatements } from '../imports';
2
+ import { join, dirname, extname, basename } from 'path';
3
+ import { TelescopeBuilder } from '../builder';
4
+ import { createScopedRpcHookFactory } from '@cosmology/ast';
5
+ import { ProtoRef } from '@cosmology/types';
6
+ import { TelescopeParseContext } from '../build';
7
+ import { writeAstToFile } from '../utils/files';
8
+ import { fixlocalpaths } from '../utils';
9
+ import * as dotty from 'dotty';
10
+ import { createEmptyProtoRef } from '@cosmology/proto-parser';
11
+ import { camel, makeUseHookName, makeUsePkgHookName } from '@cosmology/utils';
12
+ import { variableSlug } from '@cosmology/utils';
13
+ import { swapKeyValue } from '@cosmology/utils';
14
+
15
+ export const plugin = (
16
+ builder: TelescopeBuilder
17
+ ) => {
18
+ // if react query is enabled
19
+ // generate hooks.ts based on query hooks generated in each package.
20
+ // eg: __fixtures__/output1/hooks.ts
21
+ if (!builder.options.reactQuery.enabled) {
22
+ return;
23
+ }
24
+
25
+ const localname = 'hooks.ts';
26
+
27
+ // get mapping of packages and rpc query filenames.
28
+ const obj = {};
29
+ const instantHooksMapping = {}
30
+ const methodSet = new Set()
31
+ const bundlerFiles = builder.stateManagers["reactQuery"];
32
+
33
+ if (!bundlerFiles || !bundlerFiles.length) {
34
+ return;
35
+ }
36
+
37
+ let nameMapping = builder.options.reactQuery?.instantExport?.nameMapping;
38
+
39
+ nameMapping = swapKeyValue(nameMapping ?? {});
40
+
41
+ bundlerFiles.map(bundlerFile => {
42
+ const path = `./${bundlerFile.localname.replace(/\.ts$/, '')}`;
43
+ dotty.put(obj, bundlerFile.package, path);
44
+
45
+ // build instantHooksMapping
46
+ bundlerFile.instantExportedMethods?.forEach((method)=>{
47
+ const methodName = method.name;
48
+
49
+ const useHookName = makeUseHookName(camel(methodName));
50
+ const hookNameWithPkg = `${bundlerFile.package}.${useHookName}`;
51
+ let instantHookName = null;
52
+
53
+ if(nameMapping[hookNameWithPkg]){
54
+ instantHookName = nameMapping[hookNameWithPkg]
55
+ } else {
56
+ if(methodSet.has(useHookName)){
57
+ instantHookName = makeUsePkgHookName(bundlerFile.package, methodName);
58
+ } else {
59
+ instantHookName = useHookName
60
+ }
61
+ }
62
+
63
+ dotty.put(instantHooksMapping, instantHookName, {
64
+ useHookName,
65
+ importedVarName: variableSlug(path),
66
+ comment: `${bundlerFile.package}.${useHookName}\n${method.comment ?? methodName}`
67
+ });
68
+
69
+ methodSet.add(instantHookName);
70
+ });
71
+ });
72
+
73
+ // create proto ref for context
74
+ const pkg = '@root';
75
+ const ref: ProtoRef = createEmptyProtoRef(pkg, localname)
76
+
77
+ // create context
78
+ const pCtx = new TelescopeParseContext(
79
+ ref,
80
+ builder.store,
81
+ builder.options
82
+ );
83
+
84
+ // generate code for createRpcQueryHooks and imports of related packages.
85
+ const ast = createScopedRpcHookFactory(
86
+ pCtx.proto,
87
+ obj,
88
+ 'createRpcQueryHooks',
89
+ instantHooksMapping
90
+ )
91
+
92
+ // generate imports added by context.addUtil
93
+ const imports = fixlocalpaths(aggregateImports(pCtx, {}, localname));
94
+ const importStmts = getImportStatements(
95
+ localname,
96
+ imports,
97
+ builder.options
98
+ );
99
+
100
+ // construct the AST
101
+ const prog = []
102
+ .concat(importStmts)
103
+ .concat(ast);
104
+
105
+ // write the file.
106
+ const filename = join(builder.outPath, localname);
107
+ builder.files.push(localname);
108
+
109
+ writeAstToFile(builder.outPath, builder.options, prog, filename);
110
+
111
+ };
@@ -0,0 +1,70 @@
1
+ import { buildAllImports, getDepsFromMutations } from '../imports';
2
+ import { Bundler } from '../bundler';
3
+ import { parse } from '../parse';
4
+ import { TelescopeBuilder } from '../builder';
5
+ import { getExportedTypeNames } from '../utils/files';
6
+
7
+ export const plugin = (
8
+ builder: TelescopeBuilder,
9
+ bundler: Bundler
10
+ ) => {
11
+
12
+ if (!builder.options.aminoEncoding?.enabled) {
13
+ return;
14
+ }
15
+
16
+ const mutationContexts = bundler
17
+ .contexts
18
+ .filter(context => context.mutations.length > 0);
19
+
20
+ // [x] write out one registry helper for all contexts w/mutations
21
+ const registries = mutationContexts.map(c => {
22
+
23
+ const enabled = c.amino.pluginValue('aminoEncoding.enabled');
24
+ if (!enabled) return;
25
+
26
+ if (c.proto.isExcluded()) return;
27
+
28
+ const localname = bundler.getLocalFilename(c.ref, 'registry');
29
+ const filename = bundler.getFilename(localname);
30
+ const ctx = bundler.getFreshContext(c);
31
+
32
+ // get mutations, services
33
+ parse(ctx);
34
+
35
+ ctx.buildRegistry();
36
+ ctx.buildRegistryLoader();
37
+ ctx.buildHelperObject();
38
+
39
+ const serviceImports = getDepsFromMutations(
40
+ ctx.mutations,
41
+ localname
42
+ );
43
+
44
+ const imports = buildAllImports(ctx, serviceImports, localname);
45
+ const prog = []
46
+ .concat(imports)
47
+ .concat(ctx.body);
48
+
49
+ const exportedTypeNames = getExportedTypeNames(prog);
50
+
51
+ exportedTypeNames.forEach((name) => {
52
+ builder.store.setTypeFilesMapping(name, localname);
53
+ });
54
+
55
+ bundler.addExportObjToBundle(c.ref.proto.package, localname, exportedTypeNames);
56
+
57
+ bundler.writeAst(prog, filename);
58
+ bundler.addToBundle(c, localname);
59
+
60
+ return {
61
+ package: c.ref.proto.package,
62
+ localname,
63
+ filename
64
+ };
65
+
66
+ }).filter(Boolean);
67
+
68
+ bundler.addRegistries(registries);
69
+
70
+ };
@@ -0,0 +1,316 @@
1
+ import { TelescopeBuilder } from "../builder";
2
+ import { writeContentToFile } from "../utils/files";
3
+ import { join, basename } from "path";
4
+ import { makeAliasNameWithPackageAtEnd } from "@cosmology/utils";
5
+
6
+ /**
7
+ * Gets the aliased function name if it's duplicated across multiple files
8
+ */
9
+ function getAliasedFunctionName(builder: TelescopeBuilder, functionName: string, packageName: string): string {
10
+ const duplicatedHelperFuncs = builder.store.getHelperFuncsInMultipleFiles();
11
+ const isDuplicated = duplicatedHelperFuncs.includes(functionName);
12
+
13
+ if (isDuplicated) {
14
+ const serialNumber = builder.store.getAndIncTypeSerialNumber(functionName);
15
+ if (serialNumber > 0) {
16
+ return makeAliasNameWithPackageAtEnd({ package: packageName, name: functionName });
17
+ }
18
+ }
19
+
20
+ return functionName;
21
+ }
22
+
23
+ /**
24
+ * Cleans up comments by removing lint directives and technical annotations
25
+ */
26
+ function cleanComment(comment: string): string {
27
+ if (!comment) return comment;
28
+
29
+ // Remove lint directives and technical annotations
30
+ const cleanedComment = comment
31
+ // Remove buf:lint:ignore directives
32
+ .replace(/buf:lint:ignore\s+[A-Z_]+/gi, '')
33
+ // Remove other common lint directives
34
+ .replace(/lint:ignore[:\s]+[A-Z_]+/gi, '')
35
+ // Remove protolint directives
36
+ .replace(/protolint:disable[:\s]+[A-Z_]+/gi, '')
37
+ // Remove eslint directives
38
+ .replace(/eslint-disable[:\s-]+[a-z-]+/gi, '')
39
+ // Remove multiple consecutive spaces
40
+ .replace(/\s+/g, ' ')
41
+ // Remove leading/trailing whitespace
42
+ .trim();
43
+
44
+ return cleanedComment;
45
+ }
46
+
47
+ /**
48
+ * Gets the project name from the output path
49
+ */
50
+ function getProjectName(outPath: string): string {
51
+ return basename(outPath);
52
+ }
53
+
54
+ /**
55
+ * Gets the appropriate import path for a function, considering bundle exports
56
+ */
57
+ function getImportPath(builder: TelescopeBuilder, functionName: string, packageName: string, projectName: string, sourceFilename?: string): string {
58
+ const duplicatedHelperFuncs = builder.store.getHelperFuncsInMultipleFiles();
59
+ const isDuplicated = duplicatedHelperFuncs.includes(functionName);
60
+
61
+ // If the function is duplicated (and thus potentially aliased), it should be available in the bundle
62
+ if (isDuplicated) {
63
+ // Check the aliased function name to see if it would be different
64
+ const aliasedName = getAliasedFunctionName(builder, functionName, packageName);
65
+ if (aliasedName !== functionName) {
66
+ // Extract the top-level package name (e.g., 'akash' from 'akash.audit.v1beta2')
67
+ const topLevelPackage = packageName.split('.')[0];
68
+
69
+ // Function is aliased and should be available in bundle
70
+ return `${projectName}/${topLevelPackage}/bundle`;
71
+ }
72
+ }
73
+
74
+ // If we have source filename info, use the full file path
75
+ // This handles all functions with specific file locations
76
+ if (sourceFilename) {
77
+ // Remove .ts extension and convert to proper import path
78
+ const filePath = sourceFilename.replace(/\.ts$/, '');
79
+ return `${projectName}/${filePath}`;
80
+ }
81
+
82
+ // Fallback: import from the specific package path
83
+ return `${projectName}/${packageName.replace(/\./g, '/')}`;
84
+ }
85
+
86
+ /**
87
+ * Gets all types for a package by looking at export objects and filtering out extended forms
88
+ */
89
+ function getTypesForPackage(builder: TelescopeBuilder, packageName: string): Array<{ name: string, sourceFile: string }> {
90
+ const types: Array<{ name: string, sourceFile: string }> = [];
91
+
92
+ // Get all contexts for this package
93
+ const packageContexts = builder.contexts.filter(ctx => ctx.ref.proto.package === packageName);
94
+
95
+ packageContexts.forEach(context => {
96
+ // Get types from this context
97
+ const contextTypes = context.types.filter(type => !type.isNested);
98
+
99
+ contextTypes.forEach(typeInfo => {
100
+ const typeName = typeInfo.name;
101
+ // Filter out extended forms (these are created during code generation but not in the types array)
102
+ if (!typeName.endsWith('ProtoMsg') &&
103
+ !typeName.endsWith('Amino') &&
104
+ !typeName.endsWith('AminoMsg') &&
105
+ !typeName.endsWith('Encoded') &&
106
+ !typeName.endsWith('SDKType')) {
107
+
108
+ // Get the actual source file from the store mapping
109
+ const typeFiles = builder.store.getTypeFilesMapping(typeName);
110
+ let sourceFile: string;
111
+
112
+ if (typeFiles && typeFiles.length > 0) {
113
+ // Use the first (or most relevant) file where this type is defined
114
+ sourceFile = typeFiles[0];
115
+ } else {
116
+ // Fallback to context ref filename if not in mapping
117
+ sourceFile = context.ref.filename.replace(/\.proto$/, '.ts');
118
+ }
119
+
120
+ types.push({
121
+ name: typeName,
122
+ sourceFile
123
+ });
124
+ }
125
+ });
126
+ });
127
+
128
+ // Remove duplicates and sort
129
+ const uniqueTypes = types.filter((type, index, self) =>
130
+ index === self.findIndex(t => t.name === type.name)
131
+ );
132
+
133
+ return uniqueTypes.sort((a, b) => a.name.localeCompare(b.name));
134
+ }
135
+
136
+ export const plugin = (builder: TelescopeBuilder) => {
137
+ if (!builder.options.readme.enabled && !builder.options.mcpServer.enabled) {
138
+ return;
139
+ }
140
+
141
+ const readmePath = join(builder.outPath, "README.md");
142
+ const projectName = getProjectName(builder.outPath);
143
+
144
+ // Get function mappings from builder
145
+ const functionMappings = builder.getFunctionMappings();
146
+
147
+ // Generate package documentation
148
+ let packageDocs = "";
149
+
150
+ Object.keys(functionMappings).sort().forEach(packageName => {
151
+ const packageServices = functionMappings[packageName];
152
+
153
+ // Check if package has any methods before adding it
154
+ const hasQueryMethods = packageServices.Query && Object.keys(packageServices.Query).length > 0;
155
+ const hasMsgMethods = packageServices.Msg && Object.keys(packageServices.Msg).length > 0;
156
+
157
+ if (!hasQueryMethods && !hasMsgMethods) {
158
+ return; // Skip empty packages
159
+ }
160
+
161
+ packageDocs += `## ${packageName}\n\n`;
162
+
163
+ // Types section
164
+ const types = getTypesForPackage(builder, packageName);
165
+ if (types && types.length > 0) {
166
+ packageDocs += `### Types\n\n`;
167
+ packageDocs += `| Type | Name | Source |\n`;
168
+ packageDocs += `| --- | --- | --- |\n`;
169
+ types.forEach(type => {
170
+ packageDocs += `| Type | \`${type.name}\` | [View source ↗](${type.sourceFile}) |\n`;
171
+ });
172
+ packageDocs += '\n';
173
+ }
174
+
175
+ // Query section
176
+ if (packageServices.Query) {
177
+ packageDocs += `### Query Methods\n\n`;
178
+ const queryMethods = Object.keys(packageServices.Query);
179
+ queryMethods.forEach((methodName, index) => {
180
+ const method = packageServices.Query[methodName];
181
+
182
+ // Get the aliased function name using the same logic as bundler
183
+ const aliasedFunctionName = getAliasedFunctionName(builder, method.functionName, packageName);
184
+ const aliasedHookName = getAliasedFunctionName(builder, method.hookName, packageName);
185
+
186
+ packageDocs += `**${methodName}**\n\n`;
187
+
188
+ // Add comment directly after title (if exists)
189
+ if (method.comment) {
190
+ packageDocs += `${cleanComment(method.comment)}\n\n`;
191
+ }
192
+
193
+ // Add import code block
194
+ const functionImportPath = getImportPath(builder, method.functionName, packageName, projectName, method.sourceFilename);
195
+ const hookImportPath = method.hookName ? getImportPath(builder, method.hookName, packageName, projectName, method.hookSourceFilename) : functionImportPath;
196
+
197
+ packageDocs += `\`\`\`ts\n`;
198
+ packageDocs += `import { ${aliasedFunctionName} } from '${functionImportPath}'\n`;
199
+ if (method.hookName && aliasedHookName !== aliasedFunctionName) {
200
+ packageDocs += `import { ${aliasedHookName} } from '${hookImportPath}'\n`;
201
+ }
202
+ packageDocs += `\`\`\`\n\n`;
203
+
204
+ // Add function details in organized format
205
+ packageDocs += `| Field | Value | Source |\n`;
206
+ packageDocs += `| --- | --- | --- |\n`;
207
+
208
+ // Function source
209
+ const functionSourcePath = method.sourceFilename || `${packageName.replace(/\./g, '/')}/query.rpc.func.ts`;
210
+ packageDocs += `| Function | \`${aliasedFunctionName}\` | [View source ↗](${functionSourcePath}) |\n`;
211
+
212
+ // Hook source (React)
213
+ if (method.hookName && aliasedHookName !== aliasedFunctionName) {
214
+ const hookSourcePath = method.hookSourceFilename || `${packageName.replace(/\./g, '/')}/query.rpc.react.ts`;
215
+ packageDocs += `| Hook | \`${aliasedHookName}\` | [View source ↗](${hookSourcePath}) |\n`;
216
+ }
217
+
218
+ // Request type source
219
+ if (method.requestType) {
220
+ const requestSourcePath = method.typeSourceFilename || `${packageName.replace(/\./g, '/')}/query.ts`;
221
+ packageDocs += `| Request | \`${method.requestType}\` | [View source ↗](${requestSourcePath}) |\n`;
222
+ }
223
+
224
+ // Response type source
225
+ if (method.responseType) {
226
+ const responseSourcePath = method.typeSourceFilename || `${packageName.replace(/\./g, '/')}/query.ts`;
227
+ packageDocs += `| Response | \`${method.responseType}\` | [View source ↗](${responseSourcePath}) |\n`;
228
+ }
229
+
230
+ // Add spacing between methods (but not after the last one)
231
+ if (index < queryMethods.length - 1) {
232
+ packageDocs += '\n---\n\n';
233
+ } else {
234
+ packageDocs += '\n';
235
+ }
236
+ });
237
+ }
238
+
239
+ // Transaction section
240
+ if (packageServices.Msg) {
241
+ packageDocs += `### Transaction Methods\n\n`;
242
+ const msgMethods = Object.keys(packageServices.Msg);
243
+ msgMethods.forEach((methodName, index) => {
244
+ const method = packageServices.Msg[methodName];
245
+
246
+ // Get the aliased function name using the same logic as bundler
247
+ const aliasedFunctionName = getAliasedFunctionName(builder, method.functionName, packageName);
248
+ const aliasedHookName = getAliasedFunctionName(builder, method.hookName, packageName);
249
+
250
+ packageDocs += `**${methodName}**\n\n`;
251
+
252
+ // Add comment directly after title (if exists)
253
+ if (method.comment) {
254
+ packageDocs += `${cleanComment(method.comment)}\n\n`;
255
+ }
256
+
257
+ // Add import code block
258
+ const functionImportPath = getImportPath(builder, method.functionName, packageName, projectName, method.sourceFilename);
259
+ const hookImportPath = method.hookName ? getImportPath(builder, method.hookName, packageName, projectName, method.hookSourceFilename) : functionImportPath;
260
+
261
+ packageDocs += `\`\`\`ts\n`;
262
+ packageDocs += `import { ${aliasedFunctionName} } from '${functionImportPath}'\n`;
263
+ if (method.hookName && aliasedHookName !== aliasedFunctionName) {
264
+ packageDocs += `import { ${aliasedHookName} } from '${hookImportPath}'\n`;
265
+ }
266
+ packageDocs += `\`\`\`\n\n`;
267
+
268
+ // Add function details in organized format
269
+ packageDocs += `| Field | Value | Source |\n`;
270
+ packageDocs += `| --- | --- | --- |\n`;
271
+
272
+ // Function source
273
+ const functionSourcePath = method.sourceFilename || `${packageName.replace(/\./g, '/')}/tx.rpc.func.ts`;
274
+ packageDocs += `| Function | \`${aliasedFunctionName}\` | [View source ↗](${functionSourcePath}) |\n`;
275
+
276
+ // Hook source (React)
277
+ if (method.hookName && aliasedHookName !== aliasedFunctionName) {
278
+ const hookSourcePath = method.hookSourceFilename || `${packageName.replace(/\./g, '/')}/tx.rpc.react.ts`;
279
+ packageDocs += `| Hook | \`${aliasedHookName}\` | [View source ↗](${hookSourcePath}) |\n`;
280
+ }
281
+
282
+ // Request type source
283
+ if (method.requestType) {
284
+ const requestSourcePath = method.typeSourceFilename || `${packageName.replace(/\./g, '/')}/tx.ts`;
285
+ packageDocs += `| Request | \`${method.requestType}\` | [View source ↗](${requestSourcePath}) |\n`;
286
+ }
287
+
288
+ // Response type source
289
+ if (method.responseType) {
290
+ const responseSourcePath = method.typeSourceFilename || `${packageName.replace(/\./g, '/')}/tx.ts`;
291
+ packageDocs += `| Response | \`${method.responseType}\` | [View source ↗](${responseSourcePath}) |\n`;
292
+ }
293
+
294
+ // Add spacing between methods (but not after the last one)
295
+ if (index < msgMethods.length - 1) {
296
+ packageDocs += '\n---\n\n';
297
+ } else {
298
+ packageDocs += '\n';
299
+ }
300
+ });
301
+ }
302
+
303
+ // Add spacing between packages
304
+ packageDocs += '\n';
305
+ });
306
+
307
+ const readmeContent = `# Package Documentation
308
+ ${packageDocs}`;
309
+
310
+ writeContentToFile(
311
+ builder.outPath,
312
+ builder.options,
313
+ readmeContent,
314
+ readmePath
315
+ );
316
+ };
@@ -0,0 +1,167 @@
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
+ // if no scopes, do them all!
27
+ if (
28
+ !builder.options.rpcClients.scoped ||
29
+ !builder.options.rpcClients.scoped.length ||
30
+ !builder.options.rpcClients.scopedIsExclusive
31
+ ) {
32
+ return makeAllRPCBundles(
33
+ builder,
34
+ bundler
35
+ );
36
+ }
37
+ };
38
+
39
+ const getFileName = (dir, filename) => {
40
+ filename = filename.replace(/\.ts$/, '');
41
+ const localname = join(dir, filename + '.tx');
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
+ if (!proto?.Msg || proto.Msg?.type !== 'Service') {
59
+ return;
60
+ }
61
+ return true;
62
+ });
63
+
64
+ const check = refs.filter((ref: ProtoRef) => {
65
+ const [base] = ref.proto.package.split('.');
66
+ return base === bundler.bundle.base;
67
+ });
68
+
69
+ if (!check.length) {
70
+ // if there are no services
71
+ // exit the plugin
72
+ return;
73
+ }
74
+
75
+ const packages = refs.reduce((m, ref: ProtoRef) => {
76
+ const [base] = ref.proto.package.split('.');
77
+ if (base === 'cosmos' || base === bundler.bundle.base)
78
+ return [...new Set([...m, ref.proto.package])];
79
+ return m;
80
+ }, []);
81
+
82
+ const methodName = 'createRPCMsgClient'
83
+ const localname = getFileName(dir, filename ?? 'rpc');
84
+
85
+ const obj = {};
86
+ builder.rpcMsgClients.forEach(file => {
87
+
88
+ // ADD all option
89
+ // which defaults to including cosmos
90
+ // and defaults to base for each
91
+ if (!packages.includes(file.package)) {
92
+ return;
93
+ }
94
+
95
+ const f = localname;
96
+ const f2 = file.localname;
97
+ const importPath = getRelativePath(f, f2);
98
+ dotty.put(obj, file.package, importPath);
99
+ });
100
+
101
+ const ctx = new TelescopeParseContext(
102
+ createEmptyProtoRef(dir, localname),
103
+ builder.store,
104
+ builder.options
105
+ );
106
+
107
+ let rpcast;
108
+ let msgExt: any = [];
109
+ let txRpcImport: any = [];
110
+ switch (builder.options?.rpcClients?.type) {
111
+ case "grpc-gateway":
112
+ case "tendermint":
113
+ ctx.proto.addUtil('Rpc');
114
+
115
+ rpcast = createScopedRpcFactory(
116
+ obj,
117
+ methodName,
118
+ 'MsgClientImpl', // make option later,
119
+ ctx.options
120
+ );
121
+
122
+ if (ctx.proto.pluginValue('env') === 'v-next' && ctx.proto.pluginValue('rpcClients.extensions') && ctx.proto.pluginValue('stargateClients.addGetTxRpc')) {
123
+ const txRpcName = 'getSigning' + pascal(bundler.bundle.base + 'TxRpc');
124
+
125
+ txRpcImport = importStmt([txRpcName], `./client${ctx.options.restoreImportExtension ?? ""}`)
126
+
127
+ msgExt = createRpcMsgExtension(ctx.proto, txRpcName);
128
+ }
129
+ break;
130
+ case "grpc-web":
131
+ ctx.proto.addUtil('grpc');
132
+ ctx.proto.addUtil('NodeHttpTransport');
133
+
134
+ rpcast = createScopedGrpcWebMsgFactory(
135
+ obj,
136
+ methodName,
137
+ 'MsgClientImpl', // make option later,
138
+ ctx.options
139
+ );
140
+ break;
141
+ default:
142
+ break;
143
+ }
144
+
145
+ const serviceImports = getDepsFromQueries(
146
+ ctx.queries,
147
+ localname
148
+ );
149
+
150
+ const imports = aggregateImports(ctx, serviceImports, localname);
151
+
152
+ const importStmts = getImportStatements(
153
+ localname,
154
+ [...fixlocalpaths(imports)],
155
+ builder.options
156
+ );
157
+
158
+ const prog = []
159
+ .concat(txRpcImport)
160
+ .concat(importStmts)
161
+ .concat(rpcast)
162
+ .concat(msgExt);
163
+
164
+ const writeFilename = bundler.getFilename(localname);
165
+ bundler.writeAst(prog, writeFilename);
166
+ bundler.addToBundleToPackage(`${dir}.ClientFactory`, localname)
167
+ };