@cosmwasm/ts-codegen 0.7.3 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/README.md +238 -59
  2. package/main/builder/builder.js +456 -0
  3. package/main/builder/index.js +18 -0
  4. package/main/bundler/bundler.js +74 -0
  5. package/main/bundler/index.js +18 -0
  6. package/main/cmds.js +3 -9
  7. package/main/commands/create-boilerplate.js +195 -0
  8. package/main/commands/generate.js +91 -16
  9. package/main/generators/{ts-client.js → client.js} +29 -23
  10. package/main/generators/{from-partial.js → message-composer.js} +29 -21
  11. package/main/generators/react-query.js +27 -21
  12. package/main/generators/recoil.js +31 -15
  13. package/main/generators/types.js +95 -0
  14. package/main/index.js +71 -17
  15. package/main/types.js +1 -0
  16. package/main/utils/schemas.js +5 -3
  17. package/module/builder/builder.js +178 -0
  18. package/module/builder/index.js +1 -0
  19. package/module/bundler/bundler.js +36 -0
  20. package/module/bundler/index.js +1 -0
  21. package/module/cmds.js +2 -6
  22. package/module/commands/create-boilerplate.js +116 -0
  23. package/module/commands/generate.js +82 -8
  24. package/module/generators/{ts-client.js → client.js} +21 -15
  25. package/module/generators/{from-partial.js → message-composer.js} +23 -17
  26. package/module/generators/react-query.js +20 -15
  27. package/module/generators/recoil.js +23 -9
  28. package/module/generators/types.js +40 -0
  29. package/module/index.js +12 -5
  30. package/module/types.js +1 -0
  31. package/module/utils/schemas.js +3 -2
  32. package/package.json +5 -3
  33. package/types/builder/builder.d.ts +39 -0
  34. package/types/builder/index.d.ts +1 -0
  35. package/types/bundler/bundler.d.ts +4 -0
  36. package/types/bundler/index.d.ts +1 -0
  37. package/types/commands/{from-partial.d.ts → client.d.ts} +0 -0
  38. package/types/commands/message-composer.d.ts +2 -0
  39. package/types/commands/types.d.ts +2 -0
  40. package/types/generators/client.d.ts +3 -0
  41. package/types/generators/message-composer.d.ts +3 -0
  42. package/types/generators/react-query.d.ts +2 -1
  43. package/types/generators/recoil.d.ts +2 -1
  44. package/types/generators/types.d.ts +3 -0
  45. package/types/index.d.ts +10 -5
  46. package/types/types.d.ts +1 -0
  47. package/types/utils/schemas.d.ts +8 -4
  48. package/main/commands/from-partial.js +0 -78
  49. package/main/commands/react-query.js +0 -98
  50. package/main/commands/recoil.js +0 -78
  51. package/main/utils/imports.js +0 -26
  52. package/module/commands/from-partial.js +0 -33
  53. package/module/commands/react-query.js +0 -54
  54. package/module/commands/recoil.js +0 -33
  55. package/module/utils/imports.js +0 -10
  56. package/types/clean.d.ts +0 -1
  57. package/types/cleanse.d.ts +0 -1
  58. package/types/commands/boilerplate.d.ts +0 -2
  59. package/types/cosmwasm-typescript-gen.d.ts +0 -2
  60. package/types/from-partial.d.ts +0 -2
  61. package/types/generate.d.ts +0 -2
  62. package/types/generators/from-partial.d.ts +0 -2
  63. package/types/generators/ts-client.d.ts +0 -2
  64. package/types/header.d.ts +0 -1
  65. package/types/imports.d.ts +0 -1
  66. package/types/parse.d.ts +0 -1
  67. package/types/prompt.d.ts +0 -3
  68. package/types/react-query.d.ts +0 -2
  69. package/types/recoil.d.ts +0 -2
  70. package/types/utils/imports.d.ts +0 -1
  71. package/types/utils.d.ts +0 -10
package/README.md CHANGED
@@ -27,17 +27,22 @@ The quickest and easiest way to interact with CosmWasm Contracts. `@cosmwasm/ts-
27
27
  - [Table of contents](#table-of-contents)
28
28
  - [QuickStart](#quickstart)
29
29
  - [Usage](#usage)
30
- - [Generate TS Clients](#generate)
30
+ - [Programmatic Usage](#programmatic-usage)
31
+ - [Types](#types)
32
+ - [TS Clients](#client)
31
33
  - [React Query](#react-query)
32
34
  - [Recoil](#recoil)
33
35
  - [Message Composer](#message-composer)
36
+ - [Bundles](#bundles)
37
+ - [CLI Usage and Examples](#cli-usage-and-examples)
38
+ - [Advanced Usage](#advanced-usage)
34
39
  - [Example Output](#example-output)
35
40
  - [JSON Schema](#json-schema)
36
41
  - [JSON Schema Generation](#json-schema-generation)
37
42
  - [Exporting Schemas](#exporting-schemas)
38
43
  - [Developing](#developing)
39
44
  - [Related](#related)
40
- ### Quickstart
45
+ ## Quickstart
41
46
 
42
47
  Clone your project and `cd` into your contracts folder
43
48
 
@@ -49,152 +54,326 @@ cd stargaze-contracts/contracts/sg721/
49
54
  Run `cosmwasm-ts-codegen` to generate your code.
50
55
 
51
56
  ```sh
52
- cosmwasm-ts-codegen generate --schema ./schema --out ./ts --name SG721
57
+ cosmwasm-ts-codegen generate \
58
+ --plugin client \
59
+ --schema ./schema \
60
+ --out ./ts \
61
+ --name SG721
53
62
  ```
54
63
 
55
64
  The output will be in the folder specified by `--out`, enjoy!
56
65
 
57
- ## usage
66
+ ## Usage
58
67
 
59
- Get started quickly using our `cli` by globally installing via npm:
68
+ You can get started quickly using our `cli` by globally installing via npm:
60
69
 
61
70
  ```
62
71
  npm install -g @cosmwasm/ts-codegen
63
72
  ```
64
- ### generate
73
+ ### Programmatic Usage
74
+
75
+ For production usage, we recommend setting up a build script that uses the main entry point:
65
76
 
66
- Generate a basic TS client for your contracts. The `generate` command will make types which will be essential for your bindings.
77
+ ```ts
78
+ import codegen from '@cosmwasm/ts-codegen';
79
+
80
+ export const main = async () => {
81
+ await codegen({
82
+ contracts: [
83
+ {
84
+ name: 'SG721',
85
+ dir: './path/to/sg721/schema'
86
+ },
87
+ {
88
+ name: 'Minter',
89
+ dir: './path/to/Minter/schema'
90
+ }
91
+ ],
92
+ outPath: './path/to/code/src/',
93
+ options: {
94
+ bundle: {
95
+ bundleFile: 'index.ts',
96
+ scope: 'contracts'
97
+ },
98
+ types: {
99
+ enabled: true
100
+ },
101
+ client: {
102
+ enabled: true
103
+ },
104
+ reactQuery: {
105
+ enabled: true,
106
+ optionalClient: true,
107
+ version: 'v4',
108
+ mutations: true
109
+ },
110
+ recoil: {
111
+ enabled: false
112
+ },
113
+ messageComposer: {
114
+ enabled: false
115
+ }
116
+ }
117
+ });
118
+ };
119
+
120
+ main().then(() => {
121
+ console.log('✨ all done!);
122
+ });
123
+ ```
124
+ #### Types
67
125
 
68
- This command also generates a `QueryClient` for queries as well as a `Client` for queries and mutations.
126
+ Typescript types and interfaces are generated in separate files so they can be imported into various generated plugins.
69
127
 
70
128
  [see example output code](https://gist.github.com/pyramation/ba67ec56e4e2a39cadea55430f9993e5)
71
129
 
130
+ #### Types Options
131
+
132
+ | option | description |
133
+ | ----------------------------- | --------------------------------------------------- |
134
+ | `types.enabled` | enable type generation |
135
+ | `types.aliasExecuteMsg` | generate a type alias based on the contract name |
136
+
137
+ ### Client
138
+
139
+ The `client` plugin will generate TS client classes for your contracts. This option generates a `QueryClient` for queries as well as a `Client` for queries and mutations.
140
+
141
+ [see example output code](https://gist.github.com/pyramation/ba67ec56e4e2a39cadea55430f9993e5)
142
+
143
+ #### Client Options
144
+
145
+ | option | description |
146
+ | ----------------------------- | --------------------------------------------------- |
147
+ | `client.enabled` | generate TS client classes for your contracts |
148
+
149
+ #### Client via CLI
72
150
 
73
151
  ```sh
74
152
  cosmwasm-ts-codegen generate \
153
+ --plugin client
75
154
  --schema ./schema \
76
155
  --out ./ts \
77
156
  --name MyContractName
78
157
  ```
158
+ ### React Query
79
159
 
80
- for programmatic usage, you can use the `tsClient` function:
160
+ Generate [react-query v3](https://react-query-v3.tanstack.com/) or [react-query v4](https://tanstack.com/query/v4/) bindings for your contracts with the `react-query` command.
81
161
 
82
- ```ts
83
- import { tsClient } from '@cosmwasm/ts-codegen';
84
- declare const tsClient = (name: string, schemas: any[], outPath: string) => Promise<void>;
85
- ```
162
+ [see example output code](https://gist.github.com/pyramation/a3bf4aa7b60a31287d0720ca1bb5473b)
86
163
 
87
- ### react query
164
+ #### React Query Options
88
165
 
89
- Generate [react-query v3](https://react-query-v3.tanstack.com/) or [react-query v4](https://tanstack.com/query/v4/) bindings for your contracts with the `react-query` command.
166
+ | option | description |
167
+ | ------------------------------ | ------------------------------------------------------------------- |
168
+ | `reactQuery.enabled` | enable the react-query plugin |
169
+ | `reactQuery.optionalClient` | allows contract client to be undefined as the component renders |
170
+ | `reactQuery.version` | `v4` uses `@tanstack/react-query` and `v3` uses `react-query` |
171
+ | `reactQuery.mutations` | also generate mutations |
172
+ | `reactQuery.camelize` | use camelCase style for property names |
90
173
 
91
- [see example output code](https://gist.github.com/pyramation/a3bf4aa7b60a31287d0720ca1bb5473b)
92
174
 
175
+ #### React Query via CLI
93
176
 
94
- Example without optional client, using v3, without mutations:
177
+ Here is an example without optional client, using v3 for `react-query`, without mutations:
95
178
 
96
179
  ```sh
97
- cosmwasm-ts-codegen react-query \
180
+ cosmwasm-ts-codegen generate \
181
+ --plugin client \
182
+ --plugin react-query \
98
183
  --schema ./schema \
99
184
  --out ./ts \
100
185
  --name MyContractName \
186
+ --version v3 \
101
187
  --no-optionalClient \
102
- --no-v4 \
103
188
  --no-mutations
104
189
  ```
105
190
 
106
191
  Example with optional client, using v4, with mutations:
107
192
 
108
193
  ```sh
109
- cosmwasm-ts-codegen react-query \
194
+ cosmwasm-ts-codegen generate \
195
+ --plugin react-query \
110
196
  --schema ./schema \
111
197
  --out ./ts \
112
198
  --name MyContractName \
113
199
  --optionalClient \
114
- --v4 \
200
+ --version v4 \
115
201
  --mutations
116
202
  ```
117
203
 
118
- For programmatic usage, you can use the `reactQuery` function:
204
+ ### Recoil
119
205
 
120
- ```ts
121
- import { reactQuery } from '@cosmwasm/ts-codegen';
122
- declare const reactQuery = (
123
- contractName: string,
124
- schemas: any[],
125
- outPath: string,
126
- reactQueryOptions?: ReactQueryOptions
127
- ) => Promise<void>;
206
+ Generate [recoil](https://recoiljs.org/) bindings for your contracts with the `recoil` command.
207
+
208
+ [see example output code](https://gist.github.com/pyramation/48b28a75def1a16b233b369297f05f0e)
209
+
210
+ #### Recoil via CLI
211
+
212
+ ```sh
213
+ cosmwasm-ts-codegen generate \
214
+ --plugin recoil \
215
+ --schema ./schema \
216
+ --out ./ts \
217
+ --name MyContractName
128
218
  ```
129
219
 
130
- #### React Query Options
220
+ #### Recoil Options
131
221
 
132
222
  | option | description |
133
223
  | ------------------------------ | ------------------------------------------------------------------- |
134
- | `reactQuery.optionalClient` | allows contract client to be undefined as the component renders |
135
- | `reactQuery.v4` | uses `@tanstack/react-query` and syntax instead of v3 `react-query` |
136
- | `reactQuery.mutations` | also generate mutations |
137
- | `reactQuery.camelize` | use camelCase style for property names |
224
+ | `recoil.enabled` | enable the recoil plugin |
138
225
 
139
- ### recoil
226
+ ### Message Composer
140
227
 
141
- Generate [recoil](https://recoiljs.org/) bindings for your contracts with the `recoil` command.
228
+ Generate pure message objects with the proper `utf8` encoding and `typeUrl` configured that you can broadcast yourself via `cosmjs` with the `message-composer` command.
142
229
 
143
- [see example output code](https://gist.github.com/pyramation/48b28a75def1a16b233b369297f05f0e)
230
+ [see example output code](https://gist.github.com/pyramation/f50869d1ecdb6d6ced2bc0a44c6ff492)
144
231
 
232
+ #### Message Composer via CLI
145
233
 
146
234
  ```sh
147
- cosmwasm-ts-codegen recoil \
235
+ cosmwasm-ts-codegen generate \
236
+ --plugin message-composer \
148
237
  --schema ./schema \
149
238
  --out ./ts \
150
239
  --name MyContractName
151
240
  ```
241
+ #### Message Composer Options
242
+
243
+ | option | description |
244
+ | ------------------------------ | ------------------------------------------------------------------- |
245
+ | `messageComposer.enabled` | enable the messageComposer plugin |
246
+
247
+ ### Bundles
152
248
 
153
- for programmatic usage, you can use the `recoil` function:
249
+ The bundler will make a nice package of all your contracts. For example:
154
250
 
155
251
  ```ts
156
- import { recoil } from '@cosmwasm/ts-codegen';
157
- declare const recoil = (
158
- name: string,
159
- schemas: any[],
160
- outPath: string
161
- ) => Promise<void>;
252
+ const {
253
+ MinterQueryClient,
254
+ useMinterConfigQuery
255
+ } = contracts.Minter;
256
+
257
+ const { CwAdminFactoryClient } = contracts.CwAdminFactory;
162
258
  ```
163
- ### Message Composer
259
+ #### Bundler Options
164
260
 
165
- Generate pure message objects with the proper `utf8` encoding and `typeUrl` configured that you can broadcast yourself via `cosmjs` with the `from-partial` command.
261
+ | option | description |
262
+ | --------------------- | -------------------------------------------------------------------------------- |
263
+ | `bundle.enabled` | enable the bundler plugin |
264
+ | `bundle.scope` | name of the scope, defaults to `contracts` (you can use `.` to make more scopes) |
265
+ | `bundle.bundleFile` | name of the bundle file |
166
266
 
167
- [see example output code](https://gist.github.com/pyramation/f50869d1ecdb6d6ced2bc0a44c6ff492)
267
+ ### CLI Usage and Examples
268
+
269
+ #### Interactive prompt
270
+
271
+ The CLI is interactive, and if you don't specify an option, it will interactively prompt you.
272
+
273
+ ```sh
274
+ cosmwasm-ts-codegen generate
275
+ ? [plugin] which plugins? (Press <space> to select, <a> to toggle all, <i> to invert selection)
276
+ ❯◯ client
277
+ ◯ recoil
278
+ ◯ react-query
279
+ ◯ message-composer
280
+ ```
281
+
282
+ In this example, you can press space bar to select a number of plugins you wish you enable.
283
+ #### Specifying Plugins
284
+
285
+ Additionally, it will also show you the name of the field (in this case `plugin`) so you can specify the parameter (for example when using CI/CD) on the comand line. Here is an exampl with `--plugin` set to `client` via CLI:
168
286
 
169
287
  ```sh
170
- cosmwasm-ts-codegen from-partial \
288
+ cosmwasm-ts-codegen generate \
289
+ --plugin client
171
290
  --schema ./schema \
172
291
  --out ./ts \
173
- --name MyContractName
292
+ --name MyContractName
293
+ ```
294
+
295
+ You can specify multiple `--plugin` options using the `generate` command:
296
+
297
+ ```sh
298
+ cosmwasm-ts-codegen generate \
299
+ --plugin client \
300
+ --plugin recoil \
301
+ --schema ./schema \
302
+ --out ./ts \
303
+ --name SG721
174
304
  ```
175
305
 
176
- for programmatic usage, you can use the `fromPartial` function:
306
+ #### Bypassing the Prompt
177
307
 
178
- ```ts
179
- import { fromPartial } from '@cosmwasm/ts-codegen';
180
- declare const fromPartial = (name: string, schemas: any[], outPath: string) => Promise<void>;
308
+ All options can be provided so you can bypass the prompt.
309
+
310
+ For confirm options, you can pass `--no-<name>` to set the value to false. Here is an example without optional client, using v3 for `react-query`, without mutations:
311
+
312
+ ```sh
313
+ cosmwasm-ts-codegen generate \
314
+ --plugin client \
315
+ --plugin react-query \
316
+ --schema ./schema \
317
+ --out ./ts \
318
+ --name MyContractName \
319
+ --version v3 \
320
+ --no-optionalClient \
321
+ --no-mutations
322
+ ```
323
+
324
+ Example with optional client, using v4, with mutations:
325
+
326
+ ```sh
327
+ cosmwasm-ts-codegen generate \
328
+ --plugin react-query \
329
+ --schema ./schema \
330
+ --out ./ts \
331
+ --name MyContractName \
332
+ --optionalClient \
333
+ --version v4 \
334
+ --mutations
335
+ ```
336
+
337
+ #### Types Only Option
338
+
339
+ If needed, you can generate only the types with the `typesOnly` option;
340
+
341
+ ```sh
342
+ cosmwasm-ts-codegen generate \
343
+ --typesOnly \
344
+ --schema ./schema \
345
+ --out ./ts \
346
+ --name SG721
181
347
  ```
182
348
 
349
+ ### Advanced Usage
350
+
351
+ for lower-level access, you can import the various plugins directly:
352
+
353
+ ```ts
354
+ import {
355
+ generateTypes,
356
+ generateClient,
357
+ generateReactQuery,
358
+ generateRecoil,
359
+ generateMessageComposer,
360
+ } from '@cosmwasm/ts-codegen';
361
+ ```
183
362
  ### Example Output
184
363
 
185
- - `cosmwasm-ts-codegen generate`
364
+ - `cosmwasm-ts-codegen generate --plugin client`
186
365
 
187
366
  https://gist.github.com/pyramation/ba67ec56e4e2a39cadea55430f9993e5
188
367
 
189
- - `cosmwasm-ts-codegen from-partial`
368
+ - `cosmwasm-ts-codegen generate --plugin message-composer`
190
369
 
191
370
  https://gist.github.com/pyramation/f50869d1ecdb6d6ced2bc0a44c6ff492
192
371
 
193
- - `cosmwasm-ts-codegen react-query`
372
+ - `cosmwasm-ts-codegen generate --plugin react-query`
194
373
 
195
374
  https://gist.github.com/pyramation/a3bf4aa7b60a31287d0720ca1bb5473b
196
375
 
197
- - `cosmwasm-ts-codegen recoil`
376
+ - `cosmwasm-ts-codegen generate --plugin recoil`
198
377
 
199
378
  https://gist.github.com/pyramation/48b28a75def1a16b233b369297f05f0e
200
379