@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,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryAdapter = void 0;
4
+ /**
5
+ * MemoryAdapter stores files in memory using a Map.
6
+ * Used in browser context for in-memory code generation.
7
+ */
8
+ class MemoryAdapter {
9
+ files = new Map();
10
+ basePath;
11
+ constructor(options) {
12
+ // Normalize basePath - remove trailing slashes
13
+ this.basePath = (options?.basePath ?? '').replace(/\/+$/, '');
14
+ }
15
+ /**
16
+ * Write content to memory.
17
+ */
18
+ async write(filePath, content) {
19
+ const resolvedPath = this.resolvePath(filePath);
20
+ this.files.set(resolvedPath, content);
21
+ }
22
+ /**
23
+ * No-op for memory adapter - directories are virtual.
24
+ */
25
+ async mkdir(_dirPath, _options) {
26
+ // No-op - directories are virtual in memory
27
+ }
28
+ /**
29
+ * Get all file paths that were written.
30
+ */
31
+ getWrittenFiles() {
32
+ return [...this.files.keys()];
33
+ }
34
+ /**
35
+ * Get all files with their content.
36
+ */
37
+ getAllFiles() {
38
+ const result = {};
39
+ for (const [filePath, content] of this.files) {
40
+ result[filePath] = content;
41
+ }
42
+ return result;
43
+ }
44
+ /**
45
+ * Read a file from memory.
46
+ * @param filePath - The file path
47
+ * @returns The file content, or undefined if not found
48
+ */
49
+ read(filePath) {
50
+ return this.files.get(this.resolvePath(filePath));
51
+ }
52
+ /**
53
+ * Clear all files from memory.
54
+ */
55
+ clear() {
56
+ this.files.clear();
57
+ }
58
+ /**
59
+ * Check if a file exists.
60
+ */
61
+ has(filePath) {
62
+ return this.files.has(this.resolvePath(filePath));
63
+ }
64
+ /**
65
+ * Get the number of files.
66
+ */
67
+ get size() {
68
+ return this.files.size;
69
+ }
70
+ /**
71
+ * Resolve a file path with the base path.
72
+ */
73
+ resolvePath(filePath) {
74
+ if (!this.basePath) {
75
+ return filePath;
76
+ }
77
+ // Normalize to avoid double slashes
78
+ return `${this.basePath}/${filePath}`.replace(/\/+/g, '/');
79
+ }
80
+ }
81
+ exports.MemoryAdapter = MemoryAdapter;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Modelina integration for pure-core code generation.
3
+ * Generates models in-memory and returns them as GeneratedFile[].
4
+ * No I/O is performed - writing files is handled by the CLI layer.
5
+ */
6
+ import { TypeScriptFileGenerator, TypeScriptRenderCompleteModelOptions, OutputModel } from '@asyncapi/modelina';
7
+ import { GeneratedFile } from '../types';
8
+ export interface GenerateModelsArgs {
9
+ /** The Modelina generator instance */
10
+ generator: TypeScriptFileGenerator;
11
+ /** The input schema (JSON Schema or any format Modelina accepts) */
12
+ input: unknown;
13
+ /** The output path to use for file names (e.g., 'src/models') */
14
+ outputPath: string;
15
+ /** Optional render options */
16
+ options?: Partial<TypeScriptRenderCompleteModelOptions>;
17
+ }
18
+ export interface GenerateModelsResult {
19
+ /** The generated models */
20
+ models: OutputModel[];
21
+ /** Generated files with path and content */
22
+ files: GeneratedFile[];
23
+ }
24
+ /**
25
+ * Generate models using Modelina.
26
+ * Returns files as data - no I/O is performed.
27
+ *
28
+ * @returns The generated models and files
29
+ */
30
+ export declare function generateModels({ generator, input, outputPath, options }: GenerateModelsArgs): Promise<GenerateModelsResult>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateModels = void 0;
4
+ /**
5
+ * Generate models using Modelina.
6
+ * Returns files as data - no I/O is performed.
7
+ *
8
+ * @returns The generated models and files
9
+ */
10
+ async function generateModels({ generator, input, outputPath, options = {} }) {
11
+ const files = [];
12
+ // Use Modelina's generateCompleteModels() which returns OutputModel[] with rendered content
13
+ // This is the same method used by generateToFiles() internally, but without writing to disk
14
+ const models = await generator.generateCompleteModels(input, {
15
+ exportType: options.exportType ?? 'named'
16
+ });
17
+ // Filter out any models that weren't successfully generated
18
+ const validModels = models.filter((model) => model.modelName !== '');
19
+ // Collect files as data (no I/O)
20
+ for (const model of validModels) {
21
+ const fileName = `${model.modelName}.ts`;
22
+ const filePath = `${outputPath}/${fileName}`;
23
+ files.push({ path: filePath, content: model.result });
24
+ }
25
+ return {
26
+ models: validModels,
27
+ files
28
+ };
29
+ }
30
+ exports.generateModels = generateModels;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Output adapter types for abstracting file output operations.
3
+ * Allows generators to work in both CLI (filesystem) and browser (memory) environments.
4
+ */
5
+ /**
6
+ * Abstract interface for file output operations.
7
+ * Allows generators to work in both CLI (filesystem) and browser (memory) environments.
8
+ */
9
+ export interface OutputAdapter {
10
+ /**
11
+ * Write content to a file path.
12
+ * @param filePath - The file path to write to (relative or absolute)
13
+ * @param content - The content to write
14
+ */
15
+ write(filePath: string, content: string): Promise<void>;
16
+ /**
17
+ * Create a directory.
18
+ * @param dirPath - The directory path to create
19
+ * @param options - Options (e.g., recursive)
20
+ */
21
+ mkdir(dirPath: string, options?: {
22
+ recursive?: boolean;
23
+ }): Promise<void>;
24
+ /**
25
+ * Get all written files (for tracking/reporting).
26
+ * @returns Array of file paths that were written
27
+ */
28
+ getWrittenFiles(): string[];
29
+ /**
30
+ * Get all files with their content.
31
+ * For FileSystemAdapter, this returns an empty object (use getWrittenFiles() for paths).
32
+ * For MemoryAdapter, this returns all files with their content.
33
+ * @returns Record of path to content
34
+ */
35
+ getAllFiles(): Record<string, string>;
36
+ }
37
+ /**
38
+ * Options for OutputAdapter implementations.
39
+ */
40
+ export interface OutputAdapterOptions {
41
+ /**
42
+ * Base path for resolving relative paths.
43
+ * For FileSystemAdapter: directory on disk
44
+ * For MemoryAdapter: prefix for virtual paths
45
+ */
46
+ basePath?: string;
47
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Output adapter types for abstracting file output operations.
4
+ * Allows generators to work in both CLI (filesystem) and browser (memory) environments.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { GenerationResult, Generators, GeneratorsInternal, RenderTypes, RunGeneratorContext } from './types';
2
+ import Graph from 'graphology';
3
+ export type Node = {
4
+ generator: Generators;
5
+ };
6
+ type GraphType = Graph<Node>;
7
+ export declare function renderGenerator(generator: GeneratorsInternal, context: RunGeneratorContext, renderedContext: Record<string, unknown>): Promise<RenderTypes>;
8
+ export declare function determineRenderGraph(context: RunGeneratorContext): GraphType;
9
+ /**
10
+ * Recursively go over all nodes and render those that are ready to be rendered (no dependencies that have not been rendered) and recursively do it until no nodes are left
11
+ */
12
+ export declare function renderGraph(context: RunGeneratorContext, graph: GraphType): Promise<GenerationResult>;
13
+ export {};
@@ -0,0 +1,309 @@
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
+ exports.renderGraph = exports.determineRenderGraph = exports.renderGenerator = void 0;
7
+ const LoggingInterface_1 = require("../LoggingInterface");
8
+ const generators_1 = require("./generators");
9
+ const path_1 = __importDefault(require("path"));
10
+ const graphology_1 = __importDefault(require("graphology"));
11
+ const utils_1 = require("./utils");
12
+ const models_1 = require("./generators/typescript/models");
13
+ const errors_1 = require("./errors");
14
+ //eslint-disable-next-line sonarjs/cognitive-complexity
15
+ async function renderGenerator(generator, context, renderedContext) {
16
+ const { configuration, asyncapiDocument, openapiDocument, jsonSchemaDocument, configFilePath } = context;
17
+ const outputPath = path_1.default.resolve(path_1.default.dirname(configFilePath), generator.outputPath ?? '');
18
+ const language = generator.language
19
+ ? generator.language
20
+ : configuration.language;
21
+ LoggingInterface_1.Logger.debug(`Generator ${generator.id}: outputPath=${outputPath}, language=${language}, preset=${generator.preset}`);
22
+ // Check if this generator is compatible with the input type
23
+ if (configuration.inputType === 'jsonschema' &&
24
+ generator.preset !== 'models' &&
25
+ generator.preset !== 'custom') {
26
+ throw (0, errors_1.createUnsupportedPresetForInputError)({
27
+ preset: generator.preset,
28
+ inputType: 'jsonschema',
29
+ supportedPresets: ['models', 'custom']
30
+ });
31
+ }
32
+ switch (generator.preset) {
33
+ case 'payloads': {
34
+ switch (language) {
35
+ case 'typescript': {
36
+ return (0, generators_1.generateTypescriptPayload)({
37
+ asyncapiDocument,
38
+ openapiDocument,
39
+ generator: {
40
+ ...generator,
41
+ outputPath
42
+ },
43
+ config: configuration,
44
+ inputType: configuration.inputType,
45
+ dependencyOutputs: renderedContext
46
+ });
47
+ }
48
+ default: {
49
+ throw (0, errors_1.createUnsupportedLanguageError)({
50
+ preset: 'payloads',
51
+ language: language ?? 'unknown'
52
+ });
53
+ }
54
+ }
55
+ }
56
+ case 'parameters': {
57
+ switch (language) {
58
+ case 'typescript': {
59
+ return (0, generators_1.generateTypescriptParameters)({
60
+ generator: {
61
+ ...generator,
62
+ outputPath
63
+ },
64
+ config: configuration,
65
+ inputType: configuration.inputType,
66
+ asyncapiDocument,
67
+ openapiDocument,
68
+ dependencyOutputs: renderedContext
69
+ });
70
+ }
71
+ default: {
72
+ throw (0, errors_1.createUnsupportedLanguageError)({
73
+ preset: 'parameters',
74
+ language: language ?? 'unknown'
75
+ });
76
+ }
77
+ }
78
+ }
79
+ case 'headers': {
80
+ switch (language) {
81
+ case 'typescript': {
82
+ return (0, generators_1.generateTypescriptHeaders)({
83
+ asyncapiDocument,
84
+ openapiDocument,
85
+ generator: {
86
+ ...generator,
87
+ outputPath
88
+ },
89
+ config: configuration,
90
+ inputType: configuration.inputType,
91
+ dependencyOutputs: renderedContext
92
+ });
93
+ }
94
+ default: {
95
+ throw (0, errors_1.createUnsupportedLanguageError)({
96
+ preset: 'headers',
97
+ language: language ?? 'unknown'
98
+ });
99
+ }
100
+ }
101
+ }
102
+ case 'types': {
103
+ switch (language) {
104
+ case 'typescript': {
105
+ return (0, generators_1.generateTypescriptTypes)({
106
+ asyncapiDocument,
107
+ openapiDocument,
108
+ generator: {
109
+ ...generator,
110
+ outputPath
111
+ },
112
+ config: configuration,
113
+ inputType: configuration.inputType,
114
+ dependencyOutputs: renderedContext
115
+ });
116
+ }
117
+ default: {
118
+ throw (0, errors_1.createUnsupportedLanguageError)({
119
+ preset: 'types',
120
+ language: language ?? 'unknown'
121
+ });
122
+ }
123
+ }
124
+ }
125
+ case 'channels': {
126
+ switch (language) {
127
+ case 'typescript': {
128
+ return (0, generators_1.generateTypeScriptChannels)({
129
+ asyncapiDocument,
130
+ openapiDocument,
131
+ generator: {
132
+ ...generator,
133
+ outputPath
134
+ },
135
+ config: configuration,
136
+ inputType: configuration.inputType,
137
+ dependencyOutputs: renderedContext
138
+ });
139
+ }
140
+ default: {
141
+ throw (0, errors_1.createUnsupportedLanguageError)({
142
+ preset: 'channels',
143
+ language: language ?? 'unknown'
144
+ });
145
+ }
146
+ }
147
+ }
148
+ case 'client': {
149
+ switch (language) {
150
+ case 'typescript': {
151
+ return (0, generators_1.generateTypeScriptClient)({
152
+ asyncapiDocument,
153
+ openapiDocument,
154
+ generator: {
155
+ ...generator,
156
+ outputPath
157
+ },
158
+ config: configuration,
159
+ inputType: configuration.inputType,
160
+ dependencyOutputs: renderedContext
161
+ });
162
+ }
163
+ default: {
164
+ throw (0, errors_1.createUnsupportedLanguageError)({
165
+ preset: 'client',
166
+ language: language ?? 'unknown'
167
+ });
168
+ }
169
+ }
170
+ }
171
+ case 'models': {
172
+ switch (language) {
173
+ case 'typescript': {
174
+ return (0, models_1.generateTypescriptModels)({
175
+ asyncapiDocument,
176
+ openapiDocument,
177
+ jsonSchemaDocument,
178
+ generator: {
179
+ ...generator,
180
+ outputPath
181
+ },
182
+ config: configuration,
183
+ inputType: configuration.inputType,
184
+ dependencyOutputs: renderedContext
185
+ });
186
+ }
187
+ default: {
188
+ throw (0, errors_1.createUnsupportedLanguageError)({
189
+ preset: 'models',
190
+ language: language ?? 'unknown'
191
+ });
192
+ }
193
+ }
194
+ }
195
+ case 'custom': {
196
+ return generator.renderFunction({
197
+ asyncapiDocument,
198
+ openapiDocument,
199
+ jsonSchemaDocument,
200
+ inputType: configuration.inputType,
201
+ dependencyOutputs: renderedContext,
202
+ generator
203
+ }, generator.options);
204
+ }
205
+ // No default
206
+ }
207
+ }
208
+ exports.renderGenerator = renderGenerator;
209
+ function determineRenderGraph(context) {
210
+ const { configuration } = context;
211
+ const duplicateGenerators = (0, utils_1.findDuplicatesInArray)(context.configuration.generators, 'id');
212
+ if (duplicateGenerators.length > 0) {
213
+ throw (0, errors_1.createDuplicateGeneratorIdError)({ duplicateIds: duplicateGenerators });
214
+ }
215
+ const graph = new graphology_1.default({ allowSelfLoops: true, type: 'directed' });
216
+ for (const generator of configuration.generators) {
217
+ graph.addNode(generator.id, { generator });
218
+ }
219
+ for (const generator of configuration.generators) {
220
+ for (const dependency of generator.dependencies ?? []) {
221
+ graph.addDirectedEdge(dependency, generator.id);
222
+ }
223
+ }
224
+ if (graph.selfLoopCount !== 0) {
225
+ throw (0, errors_1.createCircularDependencyError)();
226
+ }
227
+ return graph;
228
+ }
229
+ exports.determineRenderGraph = determineRenderGraph;
230
+ /**
231
+ * Extract files from render result.
232
+ * Generators now return `files: GeneratedFile[]` instead of `filesWritten: string[]`.
233
+ */
234
+ function extractFilesFromResult(result) {
235
+ // Type guard to check for files property
236
+ if (result &&
237
+ typeof result === 'object' &&
238
+ 'files' in result &&
239
+ Array.isArray(result.files)) {
240
+ return result.files;
241
+ }
242
+ return [];
243
+ }
244
+ /**
245
+ * Recursively go over all nodes and render those that are ready to be rendered (no dependencies that have not been rendered) and recursively do it until no nodes are left
246
+ */
247
+ // eslint-disable-next-line sonarjs/cognitive-complexity
248
+ async function renderGraph(context, graph) {
249
+ const startTime = Date.now();
250
+ const renderedContext = {};
251
+ const generatorResults = [];
252
+ const recursivelyRenderGenerators = async (nodesToRender, previousCount) => {
253
+ const count = nodesToRender.length;
254
+ if (previousCount === count) {
255
+ throw (0, errors_1.createCircularDependencyError)();
256
+ }
257
+ const nodesToRenderNext = [];
258
+ const alreadyRenderedNodes = Object.keys(renderedContext);
259
+ for (const nodeEntry of nodesToRender) {
260
+ const dependencies = graph.inEdgeEntries(nodeEntry.node);
261
+ //check if all dependencies have been rendered, if not, wait until later
262
+ let allRendered = true;
263
+ for (const dependency of dependencies) {
264
+ if (!alreadyRenderedNodes.includes(dependency.source)) {
265
+ allRendered = false;
266
+ break;
267
+ }
268
+ }
269
+ if (allRendered) {
270
+ const generatorStartTime = Date.now();
271
+ const generator = nodeEntry.attributes.generator;
272
+ LoggingInterface_1.Logger.updateSpinner(`Generating ${generator.preset}...`);
273
+ const result = await renderGenerator(generator, context, renderedContext);
274
+ renderedContext[nodeEntry.node] = result;
275
+ // Extract files from result
276
+ const files = extractFilesFromResult(result);
277
+ // Record generator result with files
278
+ generatorResults.push({
279
+ id: generator.id,
280
+ preset: generator.preset,
281
+ files,
282
+ duration: Date.now() - generatorStartTime
283
+ });
284
+ }
285
+ else {
286
+ nodesToRenderNext.push(nodeEntry);
287
+ }
288
+ }
289
+ if (nodesToRenderNext.length > 0) {
290
+ await recursivelyRenderGenerators(nodesToRenderNext, count);
291
+ }
292
+ };
293
+ await recursivelyRenderGenerators([...graph.nodeEntries()]);
294
+ // Collect all files (deduplicated by path)
295
+ const allFilesMap = new Map();
296
+ for (const result of generatorResults) {
297
+ for (const file of result.files) {
298
+ // Later files with same path override earlier ones
299
+ allFilesMap.set(file.path, file);
300
+ }
301
+ }
302
+ const allFiles = Array.from(allFilesMap.values());
303
+ return {
304
+ generators: generatorResults,
305
+ files: allFiles,
306
+ totalDuration: Date.now() - startTime
307
+ };
308
+ }
309
+ exports.renderGraph = renderGraph;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Post-processors for `zod-to-json-schema`. Splits a single Zod source-of-truth
3
+ * (markdown-enabled `.describe()` text) into two JSON Schema variants:
4
+ * a clean one (markdown links stripped) and a markdown one (description
5
+ * renamed to `markdownDescription` so Monaco renders it as markdown).
6
+ */
7
+ import type { PostProcessCallback } from 'zod-to-json-schema';
8
+ /**
9
+ * Replace markdown links of the form `[text](https://...)` with their link
10
+ * text. Leaves plain bracketed text (e.g. `[string]`) untouched because the
11
+ * expression requires `(http://` or `(https://` immediately after.
12
+ */
13
+ export declare function stripMarkdownLinks(text: string): string;
14
+ /**
15
+ * Strip markdown link wrappers from a JSON Schema node's description.
16
+ * Used to produce the canonical schema consumed by CLI validation and IDEs
17
+ * that don't understand markdown.
18
+ */
19
+ export declare const postProcessClean: PostProcessCallback;
20
+ /**
21
+ * Rename a JSON Schema node's `description` to `markdownDescription` so
22
+ * Monaco-based editors render the text as markdown (and links become
23
+ * clickable) in hover tooltips.
24
+ */
25
+ export declare const postProcessMarkdown: PostProcessCallback;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postProcessMarkdown = exports.postProcessClean = exports.stripMarkdownLinks = void 0;
4
+ const MD_LINK_RE = /\[([^\]]+)\]\(https?:\/\/[^)]+\)/g;
5
+ /**
6
+ * Replace markdown links of the form `[text](https://...)` with their link
7
+ * text. Leaves plain bracketed text (e.g. `[string]`) untouched because the
8
+ * expression requires `(http://` or `(https://` immediately after.
9
+ */
10
+ function stripMarkdownLinks(text) {
11
+ return text.replace(MD_LINK_RE, '$1');
12
+ }
13
+ exports.stripMarkdownLinks = stripMarkdownLinks;
14
+ /**
15
+ * Strip markdown link wrappers from a JSON Schema node's description.
16
+ * Used to produce the canonical schema consumed by CLI validation and IDEs
17
+ * that don't understand markdown.
18
+ */
19
+ const postProcessClean = (out) => {
20
+ if (out && typeof out.description === 'string') {
21
+ out.description = stripMarkdownLinks(out.description);
22
+ }
23
+ return out;
24
+ };
25
+ exports.postProcessClean = postProcessClean;
26
+ /**
27
+ * Rename a JSON Schema node's `description` to `markdownDescription` so
28
+ * Monaco-based editors render the text as markdown (and links become
29
+ * clickable) in hover tooltips.
30
+ */
31
+ const postProcessMarkdown = (out) => {
32
+ if (out && typeof out.description === 'string') {
33
+ out.markdownDescription = out.description;
34
+ delete out.description;
35
+ }
36
+ return out;
37
+ };
38
+ exports.postProcessMarkdown = postProcessMarkdown;