@alagoni97/cli 0.72.1

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 (244) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +336 -0
  3. package/bin/dev.cmd +3 -0
  4. package/bin/dev.mjs +3 -0
  5. package/bin/run.cmd +3 -0
  6. package/bin/run.mjs +4 -0
  7. package/dist/LoggingInterface.d.ts +123 -0
  8. package/dist/LoggingInterface.js +300 -0
  9. package/dist/PersistedConfig.d.ts +46 -0
  10. package/dist/PersistedConfig.js +94 -0
  11. package/dist/browser/adapters/output.d.ts +69 -0
  12. package/dist/browser/adapters/output.js +91 -0
  13. package/dist/browser/config.d.ts +18 -0
  14. package/dist/browser/config.js +59 -0
  15. package/dist/browser/generate.d.ts +20 -0
  16. package/dist/browser/generate.js +129 -0
  17. package/dist/browser/index.d.ts +17 -0
  18. package/dist/browser/index.js +26 -0
  19. package/dist/browser/parser.d.ts +9 -0
  20. package/dist/browser/parser.js +61 -0
  21. package/dist/browser/shims/asyncapi-parser.d.ts +30 -0
  22. package/dist/browser/shims/asyncapi-parser.js +52 -0
  23. package/dist/browser/shims/fs.d.ts +190 -0
  24. package/dist/browser/shims/fs.js +188 -0
  25. package/dist/browser/shims/json-schema-ref-parser.d.ts +73 -0
  26. package/dist/browser/shims/json-schema-ref-parser.js +246 -0
  27. package/dist/browser/shims/swagger-parser.d.ts +20 -0
  28. package/dist/browser/shims/swagger-parser.js +40 -0
  29. package/dist/codegen/configurationSchemaBuilder.d.ts +15 -0
  30. package/dist/codegen/configurationSchemaBuilder.js +48 -0
  31. package/dist/codegen/configurations.d.ts +29 -0
  32. package/dist/codegen/configurations.js +260 -0
  33. package/dist/codegen/detection.d.ts +19 -0
  34. package/dist/codegen/detection.js +174 -0
  35. package/dist/codegen/errors.d.ts +111 -0
  36. package/dist/codegen/errors.js +352 -0
  37. package/dist/codegen/generators/generic/custom.d.ts +75 -0
  38. package/dist/codegen/generators/generic/custom.js +66 -0
  39. package/dist/codegen/generators/index.d.ts +14 -0
  40. package/dist/codegen/generators/index.js +42 -0
  41. package/dist/codegen/generators/typescript/channels/asyncapi.d.ts +10 -0
  42. package/dist/codegen/generators/typescript/channels/asyncapi.js +131 -0
  43. package/dist/codegen/generators/typescript/channels/index.d.ts +8 -0
  44. package/dist/codegen/generators/typescript/channels/index.js +142 -0
  45. package/dist/codegen/generators/typescript/channels/openapi.d.ts +9 -0
  46. package/dist/codegen/generators/typescript/channels/openapi.js +168 -0
  47. package/dist/codegen/generators/typescript/channels/protocols/amqp/index.d.ts +7 -0
  48. package/dist/codegen/generators/typescript/channels/protocols/amqp/index.js +149 -0
  49. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.d.ts +5 -0
  50. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.js +106 -0
  51. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.d.ts +3 -0
  52. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.js +102 -0
  53. package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.d.ts +3 -0
  54. package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.js +133 -0
  55. package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.d.ts +3 -0
  56. package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.js +100 -0
  57. package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.d.ts +5 -0
  58. package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.js +144 -0
  59. package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.d.ts +6 -0
  60. package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.js +132 -0
  61. package/dist/codegen/generators/typescript/channels/protocols/http/client.d.ts +10 -0
  62. package/dist/codegen/generators/typescript/channels/protocols/http/client.js +224 -0
  63. package/dist/codegen/generators/typescript/channels/protocols/http/common-types.d.ts +14 -0
  64. package/dist/codegen/generators/typescript/channels/protocols/http/common-types.js +800 -0
  65. package/dist/codegen/generators/typescript/channels/protocols/http/index.d.ts +8 -0
  66. package/dist/codegen/generators/typescript/channels/protocols/http/index.js +96 -0
  67. package/dist/codegen/generators/typescript/channels/protocols/http/security.d.ts +48 -0
  68. package/dist/codegen/generators/typescript/channels/protocols/http/security.js +491 -0
  69. package/dist/codegen/generators/typescript/channels/protocols/kafka/index.d.ts +6 -0
  70. package/dist/codegen/generators/typescript/channels/protocols/kafka/index.js +127 -0
  71. package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.d.ts +3 -0
  72. package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.js +108 -0
  73. package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.d.ts +3 -0
  74. package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.js +154 -0
  75. package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.d.ts +11 -0
  76. package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.js +58 -0
  77. package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.d.ts +6 -0
  78. package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.js +113 -0
  79. package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.d.ts +3 -0
  80. package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.js +99 -0
  81. package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.d.ts +3 -0
  82. package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.js +186 -0
  83. package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.d.ts +3 -0
  84. package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.js +90 -0
  85. package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.d.ts +3 -0
  86. package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.js +142 -0
  87. package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.d.ts +3 -0
  88. package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.js +100 -0
  89. package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.d.ts +3 -0
  90. package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.js +143 -0
  91. package/dist/codegen/generators/typescript/channels/protocols/nats/index.d.ts +11 -0
  92. package/dist/codegen/generators/typescript/channels/protocols/nats/index.js +224 -0
  93. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.d.ts +3 -0
  94. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.js +89 -0
  95. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.d.ts +3 -0
  96. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.js +146 -0
  97. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.d.ts +3 -0
  98. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.js +149 -0
  99. package/dist/codegen/generators/typescript/channels/protocols/nats/utils.d.ts +35 -0
  100. package/dist/codegen/generators/typescript/channels/protocols/nats/utils.js +120 -0
  101. package/dist/codegen/generators/typescript/channels/protocols/websocket/index.d.ts +7 -0
  102. package/dist/codegen/generators/typescript/channels/protocols/websocket/index.js +152 -0
  103. package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.d.ts +3 -0
  104. package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.js +64 -0
  105. package/dist/codegen/generators/typescript/channels/protocols/websocket/register.d.ts +3 -0
  106. package/dist/codegen/generators/typescript/channels/protocols/websocket/register.js +115 -0
  107. package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.d.ts +3 -0
  108. package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.js +151 -0
  109. package/dist/codegen/generators/typescript/channels/types.d.ts +181 -0
  110. package/dist/codegen/generators/typescript/channels/types.js +131 -0
  111. package/dist/codegen/generators/typescript/channels/utils.d.ts +64 -0
  112. package/dist/codegen/generators/typescript/channels/utils.js +163 -0
  113. package/dist/codegen/generators/typescript/client/index.d.ts +8 -0
  114. package/dist/codegen/generators/typescript/client/index.js +61 -0
  115. package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.d.ts +6 -0
  116. package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.js +53 -0
  117. package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.d.ts +6 -0
  118. package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.js +90 -0
  119. package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.d.ts +6 -0
  120. package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.js +83 -0
  121. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.d.ts +6 -0
  122. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.js +54 -0
  123. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.d.ts +6 -0
  124. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.js +82 -0
  125. package/dist/codegen/generators/typescript/client/protocols/nats.d.ts +2 -0
  126. package/dist/codegen/generators/typescript/client/protocols/nats.js +182 -0
  127. package/dist/codegen/generators/typescript/client/types.d.ts +49 -0
  128. package/dist/codegen/generators/typescript/client/types.js +37 -0
  129. package/dist/codegen/generators/typescript/headers.d.ts +54 -0
  130. package/dist/codegen/generators/typescript/headers.js +138 -0
  131. package/dist/codegen/generators/typescript/index.d.ts +7 -0
  132. package/dist/codegen/generators/typescript/index.js +38 -0
  133. package/dist/codegen/generators/typescript/models.d.ts +21761 -0
  134. package/dist/codegen/generators/typescript/models.js +64 -0
  135. package/dist/codegen/generators/typescript/parameters.d.ts +37 -0
  136. package/dist/codegen/generators/typescript/parameters.js +101 -0
  137. package/dist/codegen/generators/typescript/payloads.d.ts +73 -0
  138. package/dist/codegen/generators/typescript/payloads.js +250 -0
  139. package/dist/codegen/generators/typescript/types.d.ts +34 -0
  140. package/dist/codegen/generators/typescript/types.js +70 -0
  141. package/dist/codegen/generators/typescript/utils.d.ts +38 -0
  142. package/dist/codegen/generators/typescript/utils.js +195 -0
  143. package/dist/codegen/index.d.ts +7 -0
  144. package/dist/codegen/index.js +38 -0
  145. package/dist/codegen/inputs/asyncapi/generators/headers.d.ts +3 -0
  146. package/dist/codegen/inputs/asyncapi/generators/headers.js +41 -0
  147. package/dist/codegen/inputs/asyncapi/generators/parameters.d.ts +14 -0
  148. package/dist/codegen/inputs/asyncapi/generators/parameters.js +120 -0
  149. package/dist/codegen/inputs/asyncapi/generators/payloads.d.ts +16 -0
  150. package/dist/codegen/inputs/asyncapi/generators/payloads.js +124 -0
  151. package/dist/codegen/inputs/asyncapi/generators/types.d.ts +9 -0
  152. package/dist/codegen/inputs/asyncapi/generators/types.js +61 -0
  153. package/dist/codegen/inputs/asyncapi/index.d.ts +1 -0
  154. package/dist/codegen/inputs/asyncapi/index.js +7 -0
  155. package/dist/codegen/inputs/asyncapi/parser.d.ts +4 -0
  156. package/dist/codegen/inputs/asyncapi/parser.js +90 -0
  157. package/dist/codegen/inputs/index.d.ts +3 -0
  158. package/dist/codegen/inputs/index.js +19 -0
  159. package/dist/codegen/inputs/jsonschema/generators/index.d.ts +1 -0
  160. package/dist/codegen/inputs/jsonschema/generators/index.js +5 -0
  161. package/dist/codegen/inputs/jsonschema/generators/models.d.ts +7 -0
  162. package/dist/codegen/inputs/jsonschema/generators/models.js +26 -0
  163. package/dist/codegen/inputs/jsonschema/index.d.ts +1 -0
  164. package/dist/codegen/inputs/jsonschema/index.js +7 -0
  165. package/dist/codegen/inputs/jsonschema/parser.d.ts +31 -0
  166. package/dist/codegen/inputs/jsonschema/parser.js +128 -0
  167. package/dist/codegen/inputs/openapi/generators/headers.d.ts +3 -0
  168. package/dist/codegen/inputs/openapi/generators/headers.js +101 -0
  169. package/dist/codegen/inputs/openapi/generators/parameters.d.ts +10 -0
  170. package/dist/codegen/inputs/openapi/generators/parameters.js +852 -0
  171. package/dist/codegen/inputs/openapi/generators/payloads.d.ts +3 -0
  172. package/dist/codegen/inputs/openapi/generators/payloads.js +231 -0
  173. package/dist/codegen/inputs/openapi/generators/types.d.ts +9 -0
  174. package/dist/codegen/inputs/openapi/generators/types.js +86 -0
  175. package/dist/codegen/inputs/openapi/index.d.ts +2 -0
  176. package/dist/codegen/inputs/openapi/index.js +8 -0
  177. package/dist/codegen/inputs/openapi/parser.d.ts +4 -0
  178. package/dist/codegen/inputs/openapi/parser.js +115 -0
  179. package/dist/codegen/inputs/openapi/security.d.ts +56 -0
  180. package/dist/codegen/inputs/openapi/security.js +193 -0
  181. package/dist/codegen/modelina/index.d.ts +2 -0
  182. package/dist/codegen/modelina/index.js +20 -0
  183. package/dist/codegen/modelina/presets/index.d.ts +3 -0
  184. package/dist/codegen/modelina/presets/index.js +14 -0
  185. package/dist/codegen/modelina/presets/primitives.d.ts +34 -0
  186. package/dist/codegen/modelina/presets/primitives.js +211 -0
  187. package/dist/codegen/modelina/presets/union.d.ts +33 -0
  188. package/dist/codegen/modelina/presets/union.js +197 -0
  189. package/dist/codegen/modelina/presets/validation.d.ts +66 -0
  190. package/dist/codegen/modelina/presets/validation.js +183 -0
  191. package/dist/codegen/modelina/types.d.ts +61845 -0
  192. package/dist/codegen/modelina/types.js +412 -0
  193. package/dist/codegen/output/filesystem.d.ts +30 -0
  194. package/dist/codegen/output/filesystem.js +61 -0
  195. package/dist/codegen/output/index.d.ts +16 -0
  196. package/dist/codegen/output/index.js +57 -0
  197. package/dist/codegen/output/memory.d.ts +54 -0
  198. package/dist/codegen/output/memory.js +81 -0
  199. package/dist/codegen/output/modelina.d.ts +30 -0
  200. package/dist/codegen/output/modelina.js +30 -0
  201. package/dist/codegen/output/types.d.ts +47 -0
  202. package/dist/codegen/output/types.js +6 -0
  203. package/dist/codegen/renderer.d.ts +13 -0
  204. package/dist/codegen/renderer.js +309 -0
  205. package/dist/codegen/schemaPostProcess.d.ts +25 -0
  206. package/dist/codegen/schemaPostProcess.js +38 -0
  207. package/dist/codegen/types.d.ts +285187 -0
  208. package/dist/codegen/types.js +177 -0
  209. package/dist/codegen/utils.d.ts +126 -0
  210. package/dist/codegen/utils.js +373 -0
  211. package/dist/commands/base.d.ts +18 -0
  212. package/dist/commands/base.js +59 -0
  213. package/dist/commands/generate.d.ts +46 -0
  214. package/dist/commands/generate.js +305 -0
  215. package/dist/commands/init.d.ts +55 -0
  216. package/dist/commands/init.js +544 -0
  217. package/dist/commands/telemetry.d.ts +25 -0
  218. package/dist/commands/telemetry.js +115 -0
  219. package/dist/index.d.ts +29 -0
  220. package/dist/index.js +35 -0
  221. package/dist/telemetry/anonymize.d.ts +19 -0
  222. package/dist/telemetry/anonymize.js +73 -0
  223. package/dist/telemetry/collector.d.ts +26 -0
  224. package/dist/telemetry/collector.js +57 -0
  225. package/dist/telemetry/config.d.ts +32 -0
  226. package/dist/telemetry/config.js +97 -0
  227. package/dist/telemetry/events.d.ts +72 -0
  228. package/dist/telemetry/events.js +5 -0
  229. package/dist/telemetry/index.d.ts +46 -0
  230. package/dist/telemetry/index.js +91 -0
  231. package/dist/telemetry/notice.d.ts +8 -0
  232. package/dist/telemetry/notice.js +50 -0
  233. package/dist/telemetry/sender.d.ts +14 -0
  234. package/dist/telemetry/sender.js +125 -0
  235. package/dist/utils/gitignore.d.ts +66 -0
  236. package/dist/utils/gitignore.js +111 -0
  237. package/dist/utils/inputSource.d.ts +3 -0
  238. package/dist/utils/inputSource.js +26 -0
  239. package/dist/utils/refResolvers.d.ts +29 -0
  240. package/dist/utils/refResolvers.js +83 -0
  241. package/dist/utils/remoteFetch.d.ts +18 -0
  242. package/dist/utils/remoteFetch.js +64 -0
  243. package/oclif.manifest.json +510 -0
  244. package/package.json +155 -0
@@ -0,0 +1,544 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable sonarjs/no-duplicate-string */
7
+ /* eslint-disable sonarjs/no-collapsible-if */
8
+ /* eslint-disable prefer-const */
9
+ const core_1 = require("@oclif/core");
10
+ const promises_1 = require("node:fs/promises");
11
+ const path_1 = __importDefault(require("path"));
12
+ const yaml_1 = __importDefault(require("yaml"));
13
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
14
+ const inquirer = require('inquirer');
15
+ const generators_1 = require("../codegen/generators");
16
+ const gitignore_1 = require("../utils/gitignore");
17
+ const telemetry_1 = require("../telemetry");
18
+ const base_1 = require("./base");
19
+ const ConfigOptions = ['esm', 'json', 'yaml', 'ts'];
20
+ const LanguageOptions = ['typescript'];
21
+ const map = {
22
+ inputFile: {
23
+ description: 'File path for the code generation input such as AsyncAPI document'
24
+ },
25
+ configName: {
26
+ description: 'The name to use for the configuration file (dont include file extension)',
27
+ default: 'codegen'
28
+ },
29
+ outputDirectory: {
30
+ description: 'Output configuration location, path to where the configuration file should be located. If relative path, the current working directory of the terminal will be used'
31
+ },
32
+ configType: {
33
+ description: `The type of configuration file. 'esm', 'ts' can do everything, 'json' and 'yaml' is more restrictive. Read more here: https://github.com/the-codegen-project/cli/blob/main/docs/configurations.md`,
34
+ options: ConfigOptions,
35
+ default: 'esm'
36
+ }
37
+ };
38
+ class Init extends base_1.BaseCommand {
39
+ static description = 'Initialize The Codegen Project in your project';
40
+ static args = {};
41
+ static flags = {
42
+ help: core_1.Flags.help(),
43
+ verbose: core_1.Flags.boolean({
44
+ char: 'v',
45
+ description: 'Show detailed output'
46
+ }),
47
+ quiet: core_1.Flags.boolean({
48
+ char: 'q',
49
+ description: 'Only show errors and warnings'
50
+ }),
51
+ 'no-color': core_1.Flags.boolean({
52
+ description: 'Disable colored output'
53
+ }),
54
+ 'input-file': core_1.Flags.file({
55
+ description: map.inputFile.description
56
+ }),
57
+ 'config-name': core_1.Flags.file({
58
+ description: map.configName.description,
59
+ default: map.configName.default
60
+ }),
61
+ 'input-type': core_1.Flags.string({
62
+ description: 'Input file type',
63
+ options: ['asyncapi', 'openapi']
64
+ }),
65
+ 'output-directory': core_1.Flags.string({
66
+ description: map.outputDirectory.description,
67
+ default: './'
68
+ }),
69
+ 'config-type': core_1.Flags.string({
70
+ description: map.configType.description,
71
+ options: map.configType.options,
72
+ default: map.configType.default
73
+ }),
74
+ languages: core_1.Flags.string({
75
+ description: 'Which languages do you wish to generate code for?',
76
+ options: LanguageOptions
77
+ }),
78
+ 'no-tty': core_1.Flags.boolean({
79
+ description: 'Do not use an interactive terminal'
80
+ }),
81
+ 'include-payloads': core_1.Flags.boolean({
82
+ description: 'Include payloads generation, available for TypeScript',
83
+ relationships: [
84
+ {
85
+ flags: [
86
+ {
87
+ name: 'languages',
88
+ when: async (flags) => flags['languages'] === 'typescript'
89
+ },
90
+ {
91
+ name: 'input-type',
92
+ when: async (flags) => flags['input-type'] === 'asyncapi'
93
+ }
94
+ ],
95
+ type: 'all'
96
+ }
97
+ ]
98
+ }),
99
+ 'include-headers': core_1.Flags.boolean({
100
+ description: 'Include headers generation, available for TypeScript',
101
+ relationships: [
102
+ {
103
+ flags: [
104
+ {
105
+ name: 'languages',
106
+ when: async (flags) => flags['languages'] === 'typescript'
107
+ },
108
+ {
109
+ name: 'input-type',
110
+ when: async (flags) => flags['input-type'] === 'asyncapi'
111
+ }
112
+ ],
113
+ type: 'all'
114
+ }
115
+ ]
116
+ }),
117
+ 'include-client': core_1.Flags.boolean({
118
+ description: 'Include client generation, available for TypeScript',
119
+ relationships: [
120
+ {
121
+ flags: [
122
+ {
123
+ name: 'languages',
124
+ when: async (flags) => flags['languages'] === 'typescript'
125
+ },
126
+ {
127
+ name: 'input-type',
128
+ when: async (flags) => flags['input-type'] === 'asyncapi'
129
+ }
130
+ ],
131
+ type: 'all'
132
+ }
133
+ ]
134
+ }),
135
+ 'include-parameters': core_1.Flags.boolean({
136
+ description: 'Include parameters generation, available for TypeScript',
137
+ relationships: [
138
+ {
139
+ flags: [
140
+ {
141
+ name: 'languages',
142
+ when: async (flags) => flags['languages'] === 'typescript'
143
+ },
144
+ {
145
+ name: 'input-type',
146
+ when: async (flags) => flags['input-type'] === 'asyncapi'
147
+ }
148
+ ],
149
+ type: 'all'
150
+ }
151
+ ]
152
+ }),
153
+ 'include-channels': core_1.Flags.boolean({
154
+ description: 'Include channels generation, available for TypeScript',
155
+ relationships: [
156
+ {
157
+ flags: [
158
+ {
159
+ name: 'languages',
160
+ when: async (flags) => flags['languages'] === 'typescript'
161
+ },
162
+ {
163
+ name: 'input-type',
164
+ when: async (flags) => flags['input-type'] === 'asyncapi'
165
+ }
166
+ ],
167
+ type: 'all'
168
+ }
169
+ ]
170
+ }),
171
+ 'no-output': core_1.Flags.boolean({
172
+ description: 'For testing only, ignore',
173
+ hidden: true
174
+ }),
175
+ 'gitignore-generated': core_1.Flags.boolean({
176
+ description: 'Add generated output directories to .gitignore'
177
+ })
178
+ };
179
+ async run() {
180
+ const { flags } = await this.parse(Init);
181
+ // Configure logger based on flags
182
+ this.setupLogger(flags);
183
+ // eslint-disable-next-line no-undef
184
+ const isTTY = process.stdout.isTTY;
185
+ const realizedFlags = this.realizeFlags(flags);
186
+ if (!flags['no-tty'] && isTTY) {
187
+ return this.runInteractive(realizedFlags);
188
+ }
189
+ await this.createConfiguration(realizedFlags);
190
+ }
191
+ realizeConfigFile(flags) {
192
+ // eslint-disable-next-line no-undef
193
+ const processCurrentDir = process.cwd();
194
+ return path_1.default.resolve(processCurrentDir, flags.outputDirectory, `${flags.configName}.${flags.configType}`);
195
+ }
196
+ realizeFlags(flags) {
197
+ const inputFile = flags['input-file'];
198
+ const inputType = flags['input-type'];
199
+ const configName = flags['config-name'];
200
+ const configType = flags['config-type'];
201
+ const outputDirectory = flags['output-directory'];
202
+ const includePayloads = flags['include-payloads'];
203
+ const includeHeaders = flags['include-headers'];
204
+ const includeClient = flags['include-client'];
205
+ const includeParameters = flags['include-parameters'];
206
+ const includeChannels = flags['include-channels'];
207
+ const languages = flags['languages'];
208
+ const noOutput = flags['no-output'];
209
+ const gitignoreGenerated = flags['gitignore-generated'];
210
+ return {
211
+ includeChannels,
212
+ includeParameters,
213
+ includePayloads,
214
+ includeHeaders,
215
+ includeClient,
216
+ outputDirectory,
217
+ configName,
218
+ inputFile,
219
+ inputType,
220
+ configType,
221
+ languages,
222
+ noOutput,
223
+ gitignoreGenerated
224
+ };
225
+ }
226
+ /**
227
+ * Interactively ask the user for which configuration to create
228
+ */
229
+ // eslint-disable-next-line sonarjs/cognitive-complexity
230
+ async runInteractive(flags) {
231
+ let { includeChannels, includeParameters, includePayloads, includeHeaders, includeClient, configName, outputDirectory, inputFile, inputType, configType, languages, noOutput, gitignoreGenerated } = flags;
232
+ const questions = [];
233
+ questions.push({
234
+ name: 'configName',
235
+ message: map.configName.description,
236
+ default: map.configName.default,
237
+ type: 'input'
238
+ });
239
+ if (!inputFile) {
240
+ questions.push({
241
+ name: 'inputFile',
242
+ message: map.inputFile.description,
243
+ type: 'input'
244
+ });
245
+ }
246
+ if (!inputType) {
247
+ questions.push({
248
+ name: 'inputType',
249
+ message: 'Type of the input file to generate code from',
250
+ type: 'list',
251
+ choices: [
252
+ {
253
+ name: 'asyncapi',
254
+ checked: true,
255
+ value: 'asyncapi',
256
+ line: 'AsyncAPI document'
257
+ },
258
+ {
259
+ name: 'openapi',
260
+ checked: false,
261
+ value: 'openapi',
262
+ line: 'OpenAPI document'
263
+ }
264
+ ]
265
+ });
266
+ }
267
+ questions.push({
268
+ name: 'configType',
269
+ message: 'Type of configuration?',
270
+ type: 'list',
271
+ choices: [
272
+ {
273
+ name: 'esm',
274
+ checked: true,
275
+ value: 'esm',
276
+ line: 'ESM JavaScript style configuration, enables all features'
277
+ },
278
+ {
279
+ name: 'json',
280
+ value: 'json',
281
+ line: 'JSON style configuration, enables most features'
282
+ },
283
+ {
284
+ name: 'yaml',
285
+ value: 'yaml',
286
+ line: 'YAML style configuration, enables most features'
287
+ },
288
+ {
289
+ name: 'ts',
290
+ value: 'ts',
291
+ line: 'TS style configuration, enables all features'
292
+ }
293
+ ]
294
+ });
295
+ if (!languages) {
296
+ questions.push({
297
+ name: 'languages',
298
+ message: 'Which language do you wish generate for?',
299
+ type: 'list',
300
+ choices: [
301
+ {
302
+ name: 'typescript',
303
+ checked: true,
304
+ value: 'typescript',
305
+ line: 'Generate TypeScript'
306
+ }
307
+ ]
308
+ });
309
+ }
310
+ if (!includeClient) {
311
+ questions.push({
312
+ name: 'includeClient',
313
+ message: 'Do you want to include client wrapper?',
314
+ type: 'confirm',
315
+ when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
316
+ });
317
+ }
318
+ if (!includePayloads) {
319
+ questions.push({
320
+ name: 'includePayloads',
321
+ message: 'Do you want to include payload structures?',
322
+ type: 'confirm',
323
+ when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
324
+ });
325
+ }
326
+ if (!includeHeaders) {
327
+ questions.push({
328
+ name: 'includeHeaders',
329
+ message: 'Do you want to include headers structures?',
330
+ type: 'confirm',
331
+ when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
332
+ });
333
+ }
334
+ if (!includeParameters) {
335
+ questions.push({
336
+ name: 'includeParameters',
337
+ message: 'Do you want to include parameters structures?',
338
+ type: 'confirm',
339
+ when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
340
+ });
341
+ }
342
+ if (!includeChannels) {
343
+ questions.push({
344
+ name: 'includeChannels',
345
+ message: 'Do you want to include helper functions for interacting with channels?',
346
+ type: 'confirm',
347
+ when: (answers) => answers.languages === 'typescript' && answers.inputType === 'asyncapi'
348
+ });
349
+ }
350
+ questions.push({
351
+ name: 'gitignoreGenerated',
352
+ message: 'GitIgnore generated files?',
353
+ type: 'confirm',
354
+ default: true
355
+ });
356
+ if (questions.length) {
357
+ const answers = await inquirer.prompt(questions);
358
+ configType = answers.configType;
359
+ includeChannels ??= answers.includeChannels;
360
+ includeParameters ??= answers.includeParameters;
361
+ includePayloads ??= answers.includePayloads;
362
+ includeHeaders ??= answers.includeHeaders;
363
+ includeClient ??= answers.includeClient;
364
+ inputFile ??= answers.inputFile;
365
+ inputType ??= answers.inputType;
366
+ configName ??= answers.configName;
367
+ languages ??= answers.languages;
368
+ gitignoreGenerated ??= answers.gitignoreGenerated;
369
+ }
370
+ await this.createConfiguration({
371
+ configType,
372
+ includeChannels,
373
+ includeParameters,
374
+ includePayloads,
375
+ includeHeaders,
376
+ includeClient,
377
+ inputFile,
378
+ inputType,
379
+ languages,
380
+ noOutput,
381
+ configName,
382
+ outputDirectory,
383
+ gitignoreGenerated
384
+ });
385
+ }
386
+ /**
387
+ * Based on the flags, create the appropriate configuration file
388
+ */
389
+ // eslint-disable-next-line sonarjs/cognitive-complexity
390
+ async createConfiguration(flags) {
391
+ const configuration = {
392
+ inputType: flags.inputType,
393
+ inputPath: flags.inputFile,
394
+ language: flags.languages,
395
+ generators: []
396
+ };
397
+ if (flags.includeChannels) {
398
+ if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
399
+ const generator = { ...generators_1.defaultTypeScriptChannelsGenerator };
400
+ delete generator.dependencies;
401
+ delete generator.id;
402
+ delete generator.language;
403
+ delete generator.parameterGeneratorId;
404
+ delete generator.payloadGeneratorId;
405
+ configuration.generators.push(generator);
406
+ }
407
+ }
408
+ if (flags.includePayloads) {
409
+ if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
410
+ const generator = { ...generators_1.defaultTypeScriptPayloadGenerator };
411
+ delete generator.dependencies;
412
+ delete generator.id;
413
+ delete generator.language;
414
+ configuration.generators.push(generator);
415
+ }
416
+ }
417
+ if (flags.includeHeaders) {
418
+ if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
419
+ const generator = { ...generators_1.defaultTypeScriptHeadersOptions };
420
+ delete generator.dependencies;
421
+ delete generator.id;
422
+ delete generator.language;
423
+ configuration.generators.push(generator);
424
+ }
425
+ }
426
+ if (flags.includeClient) {
427
+ if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
428
+ const generator = { ...generators_1.defaultTypeScriptClientGenerator };
429
+ delete generator.dependencies;
430
+ delete generator.id;
431
+ delete generator.language;
432
+ delete generator.channelsGeneratorId;
433
+ configuration.generators.push(generator);
434
+ }
435
+ }
436
+ // eslint-disable-next-line sonarjs/no-collapsible-if
437
+ if (flags.includeParameters) {
438
+ if (flags.languages === 'typescript' && flags.inputType === 'asyncapi') {
439
+ const generator = { ...generators_1.defaultTypeScriptParametersOptions };
440
+ delete generator.dependencies;
441
+ delete generator.id;
442
+ delete generator.language;
443
+ configuration.generators.push(generator);
444
+ }
445
+ }
446
+ let fileOutput = '';
447
+ let fileExtension = 'mjs';
448
+ if (flags.configType === 'json') {
449
+ fileExtension = 'json';
450
+ fileOutput = JSON.stringify({
451
+ $schema: 'https://raw.githubusercontent.com/the-codegen-project/cli/main/schemas/configuration-schema-0.json',
452
+ ...configuration
453
+ }, null, 2);
454
+ }
455
+ else if (flags.configType === 'yaml') {
456
+ fileExtension = 'yaml';
457
+ fileOutput = `# yaml-language-server: $schema=https://raw.githubusercontent.com/the-codegen-project/cli/main/schemas/configuration-schema-0.json
458
+ ${yaml_1.default.stringify(configuration)}`;
459
+ }
460
+ else if (flags.configType === 'esm') {
461
+ const stringifiedConfiguration = JSON.stringify(configuration, null, 2);
462
+ const unquotedConfiguration = stringifiedConfiguration.replace(/"([^"]+)":/g, '$1:');
463
+ fileOutput = `/** @type {import("@the-codegen-project/cli").TheCodegenConfiguration} **/
464
+ export default ${unquotedConfiguration};`;
465
+ }
466
+ else if (flags.configType === 'ts') {
467
+ fileExtension = 'ts';
468
+ const stringifiedConfiguration = JSON.stringify(configuration, null, 2);
469
+ const unquotedConfiguration = stringifiedConfiguration.replace(/"([^"]+)":/g, '$1:');
470
+ fileOutput = `import { TheCodegenConfiguration } from '@the-codegen-project/cli';
471
+ const config: TheCodegenConfiguration = ${unquotedConfiguration};
472
+ export default config;`;
473
+ }
474
+ const outputPath = this.realizeConfigFile(flags);
475
+ let outputFilePath = path_1.default.parse(outputPath);
476
+ outputFilePath = path_1.default.resolve(outputFilePath.dir, `${outputFilePath.name}.${fileExtension}`);
477
+ if (flags.noOutput) {
478
+ this.log(`${outputFilePath}: ${fileOutput}`);
479
+ }
480
+ else {
481
+ await (0, promises_1.writeFile)(outputFilePath, fileOutput);
482
+ }
483
+ this.log(`Successfully created your sparkling new generation file at ${outputFilePath}`);
484
+ // Handle .gitignore updates
485
+ if (flags.gitignoreGenerated && !flags.noOutput) {
486
+ const outputPaths = [];
487
+ // Collect all output paths from enabled generators
488
+ if (flags.includeChannels) {
489
+ outputPaths.push(generators_1.defaultTypeScriptChannelsGenerator.outputPath);
490
+ }
491
+ if (flags.includePayloads) {
492
+ outputPaths.push(generators_1.defaultTypeScriptPayloadGenerator.outputPath);
493
+ }
494
+ if (flags.includeHeaders) {
495
+ outputPaths.push(generators_1.defaultTypeScriptHeadersOptions.outputPath);
496
+ }
497
+ if (flags.includeClient) {
498
+ outputPaths.push(generators_1.defaultTypeScriptClientGenerator.outputPath);
499
+ }
500
+ if (flags.includeParameters) {
501
+ outputPaths.push(generators_1.defaultTypeScriptParametersOptions.outputPath);
502
+ }
503
+ if (outputPaths.length > 0) {
504
+ const result = await (0, gitignore_1.updateGitignore)(outputPaths);
505
+ if (result.success) {
506
+ this.log(result.message);
507
+ }
508
+ else {
509
+ this.log(`Warning: ${result.message}`);
510
+ }
511
+ }
512
+ }
513
+ await this.handleSuccessfulInitTelemetry(flags);
514
+ }
515
+ async handleSuccessfulInitTelemetry(flags) {
516
+ // Track init completion (non-blocking, never throws)
517
+ const enabledGenerators = [];
518
+ if (flags.includePayloads) {
519
+ enabledGenerators.push('payloads');
520
+ }
521
+ if (flags.includeParameters) {
522
+ enabledGenerators.push('parameters');
523
+ }
524
+ if (flags.includeHeaders) {
525
+ enabledGenerators.push('headers');
526
+ }
527
+ if (flags.includeChannels) {
528
+ enabledGenerators.push('channels');
529
+ }
530
+ if (flags.includeClient) {
531
+ enabledGenerators.push('client');
532
+ }
533
+ // Track init completion (fire and forget, never throws)
534
+ (0, telemetry_1.trackEvent)({
535
+ event: 'init_executed',
536
+ config_type: flags.configType,
537
+ input_type: flags.inputType,
538
+ generators: enabledGenerators.length > 0 ? enabledGenerators.join(',') : 'none',
539
+ language: flags.languages,
540
+ completed: true
541
+ });
542
+ }
543
+ }
544
+ exports.default = Init;
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from './base';
2
+ export default class Telemetry extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ action: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
9
+ 'no-color': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ static examples: string[];
12
+ run(): Promise<void>;
13
+ /**
14
+ * Show telemetry status
15
+ */
16
+ private showStatus;
17
+ /**
18
+ * Enable telemetry
19
+ */
20
+ private enableTelemetry;
21
+ /**
22
+ * Disable telemetry
23
+ */
24
+ private disableTelemetry;
25
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable no-undef */
7
+ const core_1 = require("@oclif/core");
8
+ const LoggingInterface_1 = require("../LoggingInterface");
9
+ const config_1 = require("../telemetry/config");
10
+ const PersistedConfig_1 = require("../PersistedConfig");
11
+ const base_1 = require("./base");
12
+ const picocolors_1 = __importDefault(require("picocolors"));
13
+ class Telemetry extends base_1.BaseCommand {
14
+ static description = 'Manage telemetry settings';
15
+ static args = {
16
+ action: core_1.Args.string({
17
+ description: 'Action to perform: status, enable, or disable',
18
+ required: true,
19
+ options: ['status', 'enable', 'disable']
20
+ })
21
+ };
22
+ static flags = {
23
+ help: core_1.Flags.help(),
24
+ 'no-color': core_1.Flags.boolean({
25
+ description: 'Disable colored output'
26
+ })
27
+ };
28
+ static examples = [
29
+ '<%= config.bin %> <%= command.id %> status',
30
+ '<%= config.bin %> <%= command.id %> enable',
31
+ '<%= config.bin %> <%= command.id %> disable'
32
+ ];
33
+ async run() {
34
+ const { args, flags } = await this.parse(Telemetry);
35
+ // Configure logger based on flags
36
+ this.setupLogger(flags);
37
+ const { action } = args;
38
+ const useColors = !flags['no-color'];
39
+ try {
40
+ switch (action) {
41
+ case 'status':
42
+ await this.showStatus(useColors);
43
+ break;
44
+ case 'enable':
45
+ await this.enableTelemetry(useColors);
46
+ break;
47
+ case 'disable':
48
+ await this.disableTelemetry(useColors);
49
+ break;
50
+ default:
51
+ this.error(`Unknown action: ${action}. Use status, enable, or disable.`);
52
+ }
53
+ }
54
+ catch (error) {
55
+ const message = error instanceof Error ? error.message : String(error);
56
+ this.error(`Failed to ${action} telemetry: ${message}`);
57
+ }
58
+ }
59
+ /**
60
+ * Show telemetry status
61
+ */
62
+ async showStatus(useColors) {
63
+ const enabled = await (0, config_1.isTelemetryEnabled)();
64
+ const config = await (0, config_1.getTelemetryConfig)();
65
+ const configPath = (0, PersistedConfig_1.getConfigFilePath)();
66
+ const c = useColors
67
+ ? picocolors_1.default
68
+ : {
69
+ cyan: (s) => s,
70
+ green: (s) => s,
71
+ red: (s) => s,
72
+ dim: (s) => s
73
+ };
74
+ LoggingInterface_1.Logger.info(`\n${c.cyan('┌─────────────────────────────────────────────┐')}`);
75
+ LoggingInterface_1.Logger.info(`${c.cyan('│')} Telemetry Status ${c.cyan('│')}`);
76
+ LoggingInterface_1.Logger.info(`${c.cyan('└─────────────────────────────────────────────┘')}\n`);
77
+ LoggingInterface_1.Logger.info(`Status: ${enabled ? c.green('ENABLED') : c.red('DISABLED')}`);
78
+ LoggingInterface_1.Logger.info(`\nConfig file: ${c.dim(configPath)}`);
79
+ LoggingInterface_1.Logger.info(`Anonymous ID: ${c.dim(config.anonymousId)}`);
80
+ LoggingInterface_1.Logger.info(`Endpoint: ${c.dim(config.endpoint)}`);
81
+ LoggingInterface_1.Logger.info('\nWhat we collect:');
82
+ LoggingInterface_1.Logger.info(` ${c.green('✓')} Command usage and flags`);
83
+ LoggingInterface_1.Logger.info(` ${c.green('✓')} Generator types used`);
84
+ LoggingInterface_1.Logger.info(` ${c.green('✓')} Input source types (remote/local)`);
85
+ LoggingInterface_1.Logger.info(` ${c.green('✓')} CLI version and Node.js version`);
86
+ LoggingInterface_1.Logger.info(` ${c.green('✓')} Error categories (not error messages)`);
87
+ LoggingInterface_1.Logger.info("\nWhat we DON'T collect:");
88
+ LoggingInterface_1.Logger.info(` ${c.red('✗')} File paths or file names`);
89
+ LoggingInterface_1.Logger.info(` ${c.red('✗')} File contents`);
90
+ LoggingInterface_1.Logger.info(` ${c.red('✗')} Personal information`);
91
+ LoggingInterface_1.Logger.info(` ${c.red('✗')} Project names`);
92
+ LoggingInterface_1.Logger.info(`\nLearn more: ${c.cyan('https://the-codegen-project.org/docs/telemetry')}\n`);
93
+ }
94
+ /**
95
+ * Enable telemetry
96
+ */
97
+ async enableTelemetry(useColors) {
98
+ await (0, config_1.setTelemetryEnabled)(true);
99
+ const c = useColors ? picocolors_1.default : { cyan: (s) => s };
100
+ LoggingInterface_1.Logger.info('✅ Telemetry enabled');
101
+ LoggingInterface_1.Logger.info('\nThank you for helping us improve The Codegen Project!');
102
+ LoggingInterface_1.Logger.info(`Learn more: ${c.cyan('https://the-codegen-project.org/docs/telemetry')}\n`);
103
+ }
104
+ /**
105
+ * Disable telemetry
106
+ */
107
+ async disableTelemetry(useColors) {
108
+ await (0, config_1.setTelemetryEnabled)(false);
109
+ const c = useColors ? picocolors_1.default : { dim: (s) => s };
110
+ LoggingInterface_1.Logger.info('✅ Telemetry disabled');
111
+ LoggingInterface_1.Logger.info('\nYou can re-enable telemetry anytime with:');
112
+ LoggingInterface_1.Logger.info(` ${c.dim('codegen telemetry enable')}\n`);
113
+ }
114
+ }
115
+ exports.default = Telemetry;