@cosmwasm/ts-codegen 0.30.1 → 0.31.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. package/README.md +36 -30
  2. package/main/builder/builder.js +41 -4
  3. package/main/generators/create-helpers.js +38 -0
  4. package/main/helpers/contractContextBase.js +8 -0
  5. package/main/helpers/contractsContextTSX.js +8 -0
  6. package/main/helpers/index.js +31 -0
  7. package/main/plugins/client.js +11 -6
  8. package/main/plugins/message-composer.js +10 -6
  9. package/main/plugins/msg-builder.js +1 -1
  10. package/main/plugins/plugin-base.js +9 -2
  11. package/main/plugins/provider-bundle.js +146 -0
  12. package/main/plugins/provider.js +170 -0
  13. package/main/plugins/react-query.js +1 -1
  14. package/main/plugins/recoil.js +1 -1
  15. package/main/plugins/types.js +1 -1
  16. package/main/utils/files.js +77 -0
  17. package/main/utils/unused.js +68 -0
  18. package/module/builder/builder.js +28 -2
  19. package/module/generators/create-helpers.js +25 -0
  20. package/module/helpers/contractContextBase.js +92 -0
  21. package/module/helpers/contractsContextTSX.js +73 -0
  22. package/module/helpers/index.js +2 -0
  23. package/module/plugins/client.js +13 -10
  24. package/module/plugins/message-composer.js +12 -10
  25. package/module/plugins/msg-builder.js +1 -1
  26. package/module/plugins/plugin-base.js +15 -8
  27. package/module/plugins/provider-bundle.js +65 -0
  28. package/module/plugins/provider.js +81 -0
  29. package/module/plugins/react-query.js +1 -1
  30. package/module/plugins/recoil.js +1 -1
  31. package/module/plugins/types.js +1 -1
  32. package/module/utils/files.js +44 -0
  33. package/module/utils/unused.js +45 -0
  34. package/package.json +3 -3
  35. package/src/builder/builder.ts +36 -1
  36. package/src/generators/create-helpers.ts +28 -0
  37. package/src/helpers/contractContextBase.ts +92 -0
  38. package/src/helpers/contractsContextTSX.ts +73 -0
  39. package/src/helpers/index.ts +2 -0
  40. package/src/plugins/client.ts +30 -14
  41. package/src/plugins/message-composer.ts +23 -14
  42. package/src/plugins/msg-builder.ts +1 -1
  43. package/src/plugins/plugin-base.ts +30 -20
  44. package/src/plugins/provider-bundle.ts +97 -0
  45. package/src/plugins/provider.ts +114 -0
  46. package/src/plugins/react-query.ts +1 -1
  47. package/src/plugins/recoil.ts +1 -1
  48. package/src/plugins/types.ts +1 -1
  49. package/src/utils/files.ts +73 -0
  50. package/src/utils/unused.ts +52 -0
  51. package/types/src/builder/builder.d.ts +7 -1
  52. package/types/src/generators/create-helpers.d.ts +3 -0
  53. package/types/src/helpers/contractContextBase.d.ts +1 -0
  54. package/types/src/helpers/contractsContextTSX.d.ts +1 -0
  55. package/types/src/helpers/index.d.ts +2 -0
  56. package/types/src/plugins/client.d.ts +4 -3
  57. package/types/src/plugins/message-composer.d.ts +4 -3
  58. package/types/src/plugins/plugin-base.d.ts +7 -3
  59. package/types/src/plugins/provider-bundle.d.ts +13 -0
  60. package/types/src/plugins/provider.d.ts +15 -0
  61. package/types/src/plugins/use-contracts.d.ts +12 -0
  62. package/types/src/utils/files.d.ts +3 -0
  63. package/types/src/utils/unused.d.ts +5 -0
package/README.md CHANGED
@@ -36,7 +36,6 @@ The quickest and easiest way to interact with CosmWasm Contracts. `@cosmwasm/ts-
36
36
  - [React Query](#react-query)
37
37
  - [Recoil](#recoil)
38
38
  - [Message Composer](#message-composer)
39
- - [Msg Builder](#msg-builder)
40
39
  - [Bundles](#bundles)
41
40
  - [CLI Usage and Examples](#cli-usage-and-examples)
42
41
  - [Advanced Usage](#advanced-usage)
@@ -121,7 +120,7 @@ codegen({
121
120
  messageComposer: {
122
121
  enabled: false
123
122
  },
124
- msgBuilder: {
123
+ msgBuilder: {
125
124
  enabled: false
126
125
  }
127
126
  }
@@ -137,11 +136,11 @@ Typescript types and interfaces are generated in separate files so they can be i
137
136
 
138
137
  #### Types Options
139
138
 
140
- | option | description |
141
- | ----------------------------- | --------------------------------------------------- |
142
- | `types.enabled` | enable type generation |
143
- | `types.aliasExecuteMsg` | generate a type alias based on the contract name |
144
- | `types.aliasEntryPoints` | generate type aliases for the entry points based on the contract name |
139
+ | option | description |
140
+ | ------------------------ | ---------------------------------------------------- |
141
+ | `types.enabled` | enable type generation |
142
+ | `types.aliasExecuteMsg` | generate a type alias based on the contract name |
143
+ | `types.aliasEntryPoints` | generate type aliases for the entry points based on the contract name |
145
144
 
146
145
  ### Client
147
146
 
@@ -174,15 +173,15 @@ Generate [react-query v3](https://react-query-v3.tanstack.com/) or [react-query
174
173
 
175
174
  #### React Query Options
176
175
 
177
- | option | description |
178
- | ---------------------------- | ---------------------------------------------------------------------------- |
179
- | `reactQuery.enabled` | enable the react-query plugin |
180
- | `reactQuery.optionalClient` | allows contract client to be undefined as the component renders |
181
- | `reactQuery.queryKeys` | generates a const queryKeys object for use with invalidations and set values |
182
- | `reactQuery.queryFactory` | generates a const queryFactory object for useQueries and prefetchQueries use |
183
- | `reactQuery.version` | `v4` uses `@tanstack/react-query` and `v3` uses `react-query` |
184
- | `reactQuery.mutations` | also generate mutations |
185
- | `reactQuery.camelize` | use camelCase style for property names |
176
+ | option | description |
177
+ | --------------------------- | --------------------------------------------------------------------------- |
178
+ | `reactQuery.enabled` | enable the react-query plugin |
179
+ | `reactQuery.optionalClient` | allows contract client to be undefined as the component renders |
180
+ | `reactQuery.queryKeys` | generates a const queryKeys object for use with invalidations and set values |
181
+ | `reactQuery.queryFactory` | generates a const queryFactory object for useQueries and prefetchQueries use |
182
+ | `reactQuery.version` | `v4` uses `@tanstack/react-query` and `v3` uses `react-query` |
183
+ | `reactQuery.mutations` | also generate mutations |
184
+ | `reactQuery.camelize` | use camelCase style for property names |
186
185
 
187
186
 
188
187
  #### React Query via CLI
@@ -232,9 +231,9 @@ cosmwasm-ts-codegen generate \
232
231
 
233
232
  #### Recoil Options
234
233
 
235
- | option | description |
236
- | ------------------------------ | ------------------------------------------------------------------- |
237
- | `recoil.enabled` | enable the recoil plugin |
234
+ | option | description |
235
+ | ------------------------------ | ------------------------------------------------------------------- |
236
+ | `recoil.enabled` | enable the recoil plugin |
238
237
 
239
238
  ### Message Composer
240
239
 
@@ -253,9 +252,9 @@ cosmwasm-ts-codegen generate \
253
252
  ```
254
253
  #### Message Composer Options
255
254
 
256
- | option | description |
257
- | ------------------------------ | ------------------------------------------------------------------- |
258
- | `messageComposer.enabled` | enable the messageComposer plugin |
255
+ | option | description |
256
+ | ------------------------------ | ------------------------------------------------------------------- |
257
+ | `messageComposer.enabled` | enable the messageComposer plugin |
259
258
 
260
259
  ### Msg Builder
261
260
 
@@ -275,7 +274,7 @@ cosmwasm-ts-codegen generate \
275
274
  #### Message Composer Options
276
275
 
277
276
  | option | description |
278
- -------------| ------------------------------ | ------------------------------------------------------------------- |
277
+ |------------ | ------------------------------ | ------------------------------------------------------------------- |
279
278
  | `msgBuilder.enabled` | enable the msgBilder plugin |
280
279
 
281
280
 
@@ -293,11 +292,11 @@ const { CwAdminFactoryClient } = contracts.CwAdminFactory;
293
292
  ```
294
293
  #### Bundler Options
295
294
 
296
- | option | description |
297
- | --------------------- | -------------------------------------------------------------------------------- |
298
- | `bundle.enabled` | enable the bundler plugin |
299
- | `bundle.scope` | name of the scope, defaults to `contracts` (you can use `.` to make more scopes) |
300
- | `bundle.bundleFile` | name of the bundle file |
295
+ | option | description |
296
+ | --------------------- | -------------------------------------------------------------------------------- |
297
+ | `bundle.enabled` | enable the bundler plugin |
298
+ | `bundle.scope` | name of the scope, defaults to `contracts` (you can use `.` to make more scopes) |
299
+ | `bundle.bundleFile` | name of the bundle file |
301
300
 
302
301
  ### CLI Usage and Examples
303
302
 
@@ -416,6 +415,10 @@ https://gist.github.com/pyramation/a9520ccf131177b1841e02a97d7d3731
416
415
 
417
416
  https://gist.github.com/pyramation/43320e8b952751a0bd5a77dbc5b601f4
418
417
 
418
+ - `cosmwasm-ts-codegen generate --plugin msg-builder`
419
+
420
+ https://gist.github.com/adairrr/b394e62beb9856b0351883f776650f26
421
+
419
422
 
420
423
  ### JSON Schema
421
424
 
@@ -507,8 +510,11 @@ See the [docs](https://github.com/CosmWasm/ts-codegen/blob/main/packages/wasm-as
507
510
  Checkout these related projects:
508
511
 
509
512
  * [@osmonauts/telescope](https://github.com/osmosis-labs/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs.
510
- * [chain-registry](https://github.com/cosmology-tech/chain-registry) Cosmos chain registry and chain info.
511
- * [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos.
513
+ * [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry.
514
+ * [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️
515
+ * [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command.
516
+ * [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem
517
+
512
518
  ## Credits
513
519
 
514
520
  🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.tech/validator)
@@ -55,6 +55,12 @@ var _client = require("../plugins/client");
55
55
 
56
56
  var _types2 = require("../plugins/types");
57
57
 
58
+ var _provider = require("../plugins/provider");
59
+
60
+ var _createHelpers = require("../generators/create-helpers");
61
+
62
+ var _providerBundle = require("../plugins/provider-bundle");
63
+
58
64
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
59
65
 
60
66
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -75,6 +81,7 @@ var defaultOpts = {
75
81
  ;
76
82
  ;
77
83
  ;
84
+ ;
78
85
 
79
86
  function getContract(contractOpt) {
80
87
  if (typeof contractOpt === 'string') {
@@ -94,6 +101,8 @@ function getContract(contractOpt) {
94
101
 
95
102
  var TSBuilder = /*#__PURE__*/function () {
96
103
  function TSBuilder(_ref) {
104
+ var _this = this;
105
+
97
106
  var contracts = _ref.contracts,
98
107
  outPath = _ref.outPath,
99
108
  options = _ref.options,
@@ -103,6 +112,7 @@ var TSBuilder = /*#__PURE__*/function () {
103
112
  (0, _defineProperty2["default"])(this, "outPath", void 0);
104
113
  (0, _defineProperty2["default"])(this, "options", void 0);
105
114
  (0, _defineProperty2["default"])(this, "plugins", []);
115
+ (0, _defineProperty2["default"])(this, "builderContext", new _wasmAstTypes.BuilderContext());
106
116
  (0, _defineProperty2["default"])(this, "files", []);
107
117
  this.contracts = contracts;
108
118
  this.outPath = outPath;
@@ -112,12 +122,16 @@ var TSBuilder = /*#__PURE__*/function () {
112
122
  if (plugins && plugins.length) {
113
123
  [].push.apply(this.plugins, plugins);
114
124
  }
125
+
126
+ this.plugins.forEach(function (plugin) {
127
+ return plugin.setBuilder(_this);
128
+ });
115
129
  }
116
130
 
117
131
  (0, _createClass2["default"])(TSBuilder, [{
118
132
  key: "loadDefaultPlugins",
119
133
  value: function loadDefaultPlugins() {
120
- [].push.apply(this.plugins, [new _types2.TypesPlugin(this.options), new _client.ClientPlugin(this.options), new _messageComposer.MessageComposerPlugin(this.options), new _reactQuery.ReactQueryPlugin(this.options), new _recoil.RecoilPlugin(this.options), new _msgBuilder.MsgBuilderPlugin(this.options)]);
134
+ [].push.apply(this.plugins, [new _types2.TypesPlugin(this.options), new _client.ClientPlugin(this.options), new _messageComposer.MessageComposerPlugin(this.options), new _reactQuery.ReactQueryPlugin(this.options), new _recoil.RecoilPlugin(this.options), new _msgBuilder.MsgBuilderPlugin(this.options), new _provider.ContractsContextProviderPlugin(this.options)]);
121
135
  }
122
136
  }, {
123
137
  key: "build",
@@ -289,15 +303,38 @@ var TSBuilder = /*#__PURE__*/function () {
289
303
  key: "after",
290
304
  value: function () {
291
305
  var _after = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
306
+ var contractsProviderBundlePlugin, files;
292
307
  return _regenerator["default"].wrap(function _callee4$(_context4) {
293
308
  while (1) {
294
309
  switch (_context4.prev = _context4.next) {
295
310
  case 0:
296
311
  if (this.options.bundle.enabled) {
297
312
  this.bundle();
313
+ } //create useContracts bundle file
314
+
315
+
316
+ contractsProviderBundlePlugin = new _providerBundle.ContractsProviderBundlePlugin(this.options);
317
+ contractsProviderBundlePlugin.setBuilder(this);
318
+ _context4.next = 5;
319
+ return contractsProviderBundlePlugin.render("", {
320
+ schemas: []
321
+ }, this.outPath);
322
+
323
+ case 5:
324
+ files = _context4.sent;
325
+
326
+ if (files && files.length) {
327
+ [].push.apply(this.files, files);
298
328
  }
299
329
 
300
- case 1:
330
+ (0, _createHelpers.createHelpers)({
331
+ outPath: this.outPath,
332
+ contracts: this.contracts,
333
+ options: this.options,
334
+ plugins: this.plugins
335
+ }, this.builderContext);
336
+
337
+ case 8:
301
338
  case "end":
302
339
  return _context4.stop();
303
340
  }
@@ -318,7 +355,7 @@ var TSBuilder = /*#__PURE__*/function () {
318
355
  var _this$options$bundle$,
319
356
  _this$options,
320
357
  _this$options$bundle,
321
- _this = this,
358
+ _this2 = this,
322
359
  _this$options2,
323
360
  _this$options2$bundle;
324
361
 
@@ -334,7 +371,7 @@ var TSBuilder = /*#__PURE__*/function () {
334
371
  bundleVariables = {};
335
372
  importPaths = [];
336
373
  allFiles.forEach(function (file) {
337
- (0, _bundler.createFileBundle)("".concat(_this.options.bundle.scope, ".").concat(file.contract), file.filename, bundlePath, importPaths, bundleVariables);
374
+ (0, _bundler.createFileBundle)("".concat(_this2.options.bundle.scope, ".").concat(file.contract), file.filename, bundlePath, importPaths, bundleVariables);
338
375
  });
339
376
  ast = (0, _bundler.recursiveModuleBundle)(bundleVariables);
340
377
  code = (0, _generator["default"])(t.program([].concat(importPaths, (0, _toConsumableArray2["default"])(ast)))).code;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createHelpers = void 0;
9
+
10
+ var _path = require("path");
11
+
12
+ var _mkdirp = require("mkdirp");
13
+
14
+ var _package = _interopRequireDefault(require("../../package.json"));
15
+
16
+ var _files = require("../utils/files");
17
+
18
+ var _helpers = require("../helpers");
19
+
20
+ var version = process.env.NODE_ENV === "test" ? "latest" : _package["default"].version;
21
+ var header = "/**\n* This file and any referenced files were automatically generated by ".concat(_package["default"].name, "@").concat(version, "\n* DO NOT MODIFY BY HAND. Instead, download the latest proto files for your chain\n* and run the transpile command or yarn proto command to regenerate this bundle.\n*/\n\n");
22
+
23
+ var write = function write(outPath, file, content) {
24
+ var outFile = (0, _path.join)(outPath, file);
25
+ (0, _mkdirp.sync)((0, _path.dirname)(outFile));
26
+ (0, _files.writeContentToFile)(outPath, header + content, outFile);
27
+ };
28
+
29
+ var createHelpers = function createHelpers(input, builderContext) {
30
+ var _input$options, _input$options$useCon, _Object$keys;
31
+
32
+ if ((_input$options = input.options) !== null && _input$options !== void 0 && (_input$options$useCon = _input$options.useContracts) !== null && _input$options$useCon !== void 0 && _input$options$useCon.enabled && (_Object$keys = Object.keys(builderContext.providers)) !== null && _Object$keys !== void 0 && _Object$keys.length) {
33
+ write(input.outPath, "contractContextBase.ts", _helpers.contractContextBase);
34
+ write(input.outPath, "contracts-context.tsx", _helpers.contractsContextTSX);
35
+ }
36
+ };
37
+
38
+ exports.createHelpers = createHelpers;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.contractContextBase = void 0;
7
+ var contractContextBase = "\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\n\nexport interface IContractConstructor {\n address: string | undefined;\n cosmWasmClient: CosmWasmClient | undefined;\n signingCosmWasmClient: SigningCosmWasmClient | undefined;\n}\n\nexport const NO_SINGING_ERROR_MESSAGE = 'signingCosmWasmClient not connected';\n\nexport const NO_COSMWASW_CLIENT_ERROR_MESSAGE = 'cosmWasmClient not connected';\n\nexport const NO_ADDRESS_ERROR_MESSAGE = \"address doesn't exist\";\n\nexport const NO_SIGNING_CLIENT_ERROR_MESSAGE =\n 'Signing client is not generated. Please check ts-codegen config';\n\nexport const NO_QUERY_CLIENT_ERROR_MESSAGE =\n 'Query client is not generated. Please check ts-codegen config';\n\nexport const NO_MESSAGE_COMPOSER_ERROR_MESSAGE =\n 'Message composer client is not generated. Please check ts-codegen config';\n\n/**\n * a placeholder for non-generated classes\n */\nexport interface IEmptyClient {}\n\nexport interface ISigningClientProvider<T> {\n getSigningClient(contractAddr: string): T;\n}\n\nexport interface IQueryClientProvider<T> {\n getQueryClient(contractAddr: string): T;\n}\n\nexport interface IMessageComposerProvider<T> {\n getMessageComposer(contractAddr: string): T;\n}\n\nexport class ContractBase<\n TSign = IEmptyClient,\n TQuery = IEmptyClient,\n TMsgComposer = IEmptyClient\n> {\n constructor(\n protected address: string | undefined,\n protected cosmWasmClient: CosmWasmClient | undefined,\n protected signingCosmWasmClient: SigningCosmWasmClient | undefined,\n private TSign?: new (\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) => TSign,\n private TQuery?: new (\n client: CosmWasmClient,\n contractAddress: string\n ) => TQuery,\n private TMsgComposer?: new (\n sender: string,\n contractAddress: string\n ) => TMsgComposer\n ) {}\n\n public getSigningClient(contractAddr: string): TSign {\n if (!this.signingCosmWasmClient) throw new Error(NO_SINGING_ERROR_MESSAGE);\n if (!this.address) throw new Error(NO_ADDRESS_ERROR_MESSAGE);\n if (!this.TSign) throw new Error(NO_SIGNING_CLIENT_ERROR_MESSAGE);\n return new this.TSign(\n this.signingCosmWasmClient,\n this.address,\n contractAddr\n );\n }\n\n public getQueryClient(contractAddr: string): TQuery {\n if (!this.cosmWasmClient) throw new Error(NO_COSMWASW_CLIENT_ERROR_MESSAGE);\n if (!this.TQuery) throw new Error(NO_QUERY_CLIENT_ERROR_MESSAGE);\n return new this.TQuery(this.cosmWasmClient, contractAddr);\n }\n\n public getMessageComposer(contractAddr: string): TMsgComposer {\n if (!this.address) throw new Error(NO_ADDRESS_ERROR_MESSAGE);\n if (!this.TMsgComposer) throw new Error(NO_MESSAGE_COMPOSER_ERROR_MESSAGE);\n return new this.TMsgComposer(this.address, contractAddr);\n }\n}\n";
8
+ exports.contractContextBase = contractContextBase;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.contractsContextTSX = void 0;
7
+ var contractsContextTSX = "\nimport React, { useEffect, useMemo, useRef, useState, useContext } from 'react';\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\n\nimport { IContractsContext, getProviders } from './contractContextProviders';\n\ninterface ContractsConfig {\n address: string | undefined;\n getCosmWasmClient: () => Promise<CosmWasmClient>;\n getSigningCosmWasmClient: () => Promise<SigningCosmWasmClient>;\n}\n\nconst ContractsContext = React.createContext<IContractsContext | null>(null);\n\nexport const ContractsProvider = ({\n children,\n contractsConfig,\n}: {\n children: React.ReactNode;\n contractsConfig: ContractsConfig;\n}) => {\n const [cosmWasmClient, setCosmWasmClient] = useState<CosmWasmClient>();\n const [signingCosmWasmClient, setSigningCosmWasmClient] =\n useState<SigningCosmWasmClient>();\n\n const { address, getCosmWasmClient, getSigningCosmWasmClient } =\n contractsConfig;\n\n const prevAddressRef = useRef<string | undefined>(address);\n\n const contracts: IContractsContext = useMemo(() => {\n return getProviders(address, cosmWasmClient, signingCosmWasmClient);\n }, [address, cosmWasmClient, signingCosmWasmClient]);\n\n useEffect(() => {\n const connectSigningCwClient = async () => {\n if (address && prevAddressRef.current !== address) {\n const signingCosmWasmClient = await getSigningCosmWasmClient();\n setSigningCosmWasmClient(signingCosmWasmClient);\n } else if (!address) {\n setSigningCosmWasmClient(undefined);\n }\n prevAddressRef.current = address;\n };\n connectSigningCwClient();\n }, [address, getSigningCosmWasmClient]);\n\n useEffect(() => {\n const connectCosmWasmClient = async () => {\n const cosmWasmClient = await getCosmWasmClient();\n setCosmWasmClient(cosmWasmClient);\n };\n connectCosmWasmClient();\n }, [getCosmWasmClient]);\n\n return (\n <ContractsContext.Provider value={contracts}>\n {children}\n </ContractsContext.Provider>\n );\n};\n\nexport const useContracts = () => {\n const contracts = useContext(ContractsContext);\n if (contracts === null) {\n throw new Error('useContracts must be used within a ContractsProvider');\n }\n return contracts;\n};\n";
8
+ exports.contractsContextTSX = contractsContextTSX;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _contractContextBase = require("./contractContextBase");
8
+
9
+ Object.keys(_contractContextBase).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _contractContextBase[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _contractContextBase[key];
16
+ }
17
+ });
18
+ });
19
+
20
+ var _contractsContextTSX = require("./contractsContextTSX");
21
+
22
+ Object.keys(_contractsContextTSX).forEach(function (key) {
23
+ if (key === "default" || key === "__esModule") return;
24
+ if (key in exports && exports[key] === _contractsContextTSX[key]) return;
25
+ Object.defineProperty(exports, key, {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _contractsContextTSX[key];
29
+ }
30
+ });
31
+ });
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.ClientPlugin = void 0;
10
+ exports.TYPE = exports.ClientPlugin = void 0;
11
11
 
12
12
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
13
 
@@ -39,6 +39,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
39
39
 
40
40
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
41
41
 
42
+ var TYPE = "client";
43
+ exports.TYPE = TYPE;
44
+
42
45
  var ClientPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
43
46
  (0, _inherits2["default"])(ClientPlugin, _BuilderPluginBase);
44
47
 
@@ -52,7 +55,7 @@ var ClientPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
52
55
  (0, _createClass2["default"])(ClientPlugin, [{
53
56
  key: "initContext",
54
57
  value: function initContext(contract, options) {
55
- return new w.RenderContext(contract, options);
58
+ return new w.RenderContext(contract, options, this.builder.builderContext);
56
59
  }
57
60
  }, {
58
61
  key: "doRender",
@@ -74,8 +77,8 @@ var ClientPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
74
77
 
75
78
  case 3:
76
79
  schemas = context.contract.schemas;
77
- localname = (0, _case.pascal)(name) + '.client.ts';
78
- TypesFile = (0, _case.pascal)(name) + '.types';
80
+ localname = (0, _case.pascal)(name) + ".client.ts";
81
+ TypesFile = (0, _case.pascal)(name) + ".types";
79
82
  QueryMsg = (0, _utils.findQueryMsg)(schemas);
80
83
  ExecuteMsg = (0, _utils.findExecuteMsg)(schemas);
81
84
  _context.next = 10;
@@ -95,6 +98,7 @@ var ClientPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
95
98
  ReadOnlyInstance = (0, _case.pascal)("".concat(name, "ReadOnlyInterface"));
96
99
  body.push(w.createQueryInterface(context, ReadOnlyInstance, QueryMsg));
97
100
  body.push(w.createQueryClass(context, QueryClient, ReadOnlyInstance, QueryMsg));
101
+ context.addProviderInfo(name, w.PROVIDER_TYPES.QUERY_CLIENT_TYPE, QueryClient, localname);
98
102
  } // execute messages
99
103
 
100
104
 
@@ -106,16 +110,17 @@ var ClientPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
106
110
  Instance = (0, _case.pascal)("".concat(name, "Interface"));
107
111
  body.push(w.createExecuteInterface(context, Instance, this.option.client.execExtendsQuery ? ReadOnlyInstance : null, ExecuteMsg));
108
112
  body.push(w.createExecuteClass(context, Client, Instance, this.option.client.execExtendsQuery ? QueryClient : null, ExecuteMsg));
113
+ context.addProviderInfo(name, w.PROVIDER_TYPES.SIGNING_CLIENT_TYPE, Client, localname);
109
114
  }
110
115
  }
111
116
 
112
- if (typeHash.hasOwnProperty('Coin')) {
117
+ if (typeHash.hasOwnProperty("Coin")) {
113
118
  // @ts-ignore
114
119
  delete context.utils.Coin;
115
120
  }
116
121
 
117
122
  return _context.abrupt("return", [{
118
- type: 'client',
123
+ type: TYPE,
119
124
  localname: localname,
120
125
  body: body
121
126
  }]);
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.MessageComposerPlugin = void 0;
10
+ exports.TYPE = exports.MessageComposerPlugin = void 0;
11
11
 
12
12
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
13
 
@@ -39,6 +39,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
39
39
 
40
40
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
41
41
 
42
+ var TYPE = "message-composer";
43
+ exports.TYPE = TYPE;
44
+
42
45
  var MessageComposerPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
43
46
  (0, _inherits2["default"])(MessageComposerPlugin, _BuilderPluginBase);
44
47
 
@@ -52,7 +55,7 @@ var MessageComposerPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
52
55
  (0, _createClass2["default"])(MessageComposerPlugin, [{
53
56
  key: "initContext",
54
57
  value: function initContext(contract, options) {
55
- return new w.RenderContext(contract, options);
58
+ return new w.RenderContext(contract, options, this.builder.builderContext);
56
59
  }
57
60
  }, {
58
61
  key: "doRender",
@@ -74,8 +77,8 @@ var MessageComposerPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
74
77
 
75
78
  case 3:
76
79
  schemas = context.contract.schemas;
77
- localname = (0, _case.pascal)(name) + '.message-composer.ts';
78
- TypesFile = (0, _case.pascal)(name) + '.types';
80
+ localname = (0, _case.pascal)(name) + ".message-composer.ts";
81
+ TypesFile = (0, _case.pascal)(name) + ".types";
79
82
  ExecuteMsg = (0, _utils.findExecuteMsg)(schemas);
80
83
  _context.next = 9;
81
84
  return (0, _utils.findAndParseTypes)(schemas);
@@ -93,16 +96,17 @@ var MessageComposerPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
93
96
  Interface = (0, _case.pascal)("".concat(name, "Message"));
94
97
  body.push(w.createMessageComposerInterface(context, Interface, ExecuteMsg));
95
98
  body.push(w.createMessageComposerClass(context, TheClass, Interface, ExecuteMsg));
99
+ context.addProviderInfo(name, w.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE, TheClass, localname);
96
100
  }
97
101
  }
98
102
 
99
- if (typeHash.hasOwnProperty('Coin')) {
103
+ if (typeHash.hasOwnProperty("Coin")) {
100
104
  // @ts-ignore
101
105
  delete context.utils.Coin;
102
106
  }
103
107
 
104
108
  return _context.abrupt("return", [{
105
- type: 'message-composer',
109
+ type: TYPE,
106
110
  localname: localname,
107
111
  body: body
108
112
  }]);
@@ -52,7 +52,7 @@ var MsgBuilderPlugin = /*#__PURE__*/function (_BuilderPluginBase) {
52
52
  (0, _createClass2["default"])(MsgBuilderPlugin, [{
53
53
  key: "initContext",
54
54
  value: function initContext(contract, options) {
55
- return new w.RenderContext(contract, options);
55
+ return new w.RenderContext(contract, options, this.builder.builderContext);
56
56
  }
57
57
  }, {
58
58
  key: "doRender",
@@ -41,14 +41,21 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
41
41
  * BuilderPluginBase enable ts-codegen users implement their own plugins by only implement a few functions.
42
42
  */
43
43
  var BuilderPluginBase = /*#__PURE__*/function () {
44
- function BuilderPluginBase(opt) {
44
+ function BuilderPluginBase(opt, builder) {
45
45
  (0, _classCallCheck2["default"])(this, BuilderPluginBase);
46
+ (0, _defineProperty2["default"])(this, "builder", void 0);
46
47
  (0, _defineProperty2["default"])(this, "option", void 0);
47
48
  (0, _defineProperty2["default"])(this, "utils", void 0);
48
49
  this.option = opt;
50
+ this.builder = builder;
49
51
  }
50
52
 
51
53
  (0, _createClass2["default"])(BuilderPluginBase, [{
54
+ key: "setBuilder",
55
+ value: function setBuilder(builder) {
56
+ this.builder = builder;
57
+ }
58
+ }, {
52
59
  key: "render",
53
60
  value: function () {
54
61
  var _render = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(name, contractInfo, outPath) {
@@ -85,7 +92,7 @@ var BuilderPluginBase = /*#__PURE__*/function () {
85
92
 
86
93
  case 9:
87
94
  return _context.abrupt("return", results.map(function (result) {
88
- var imports = context.getImports(_this.utils);
95
+ var imports = context.getImports(_this.utils, result.localname);
89
96
  var code = _header.header + (0, _generator["default"])(t.program([].concat((0, _toConsumableArray2["default"])(imports), (0, _toConsumableArray2["default"])(result.body)))).code;
90
97
  (0, _mkdirp.sync)(outPath);
91
98
  var filename = (0, _path.join)(outPath, result.localname);