@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,20 @@
1
+ /**
2
+ * Browser shim for @apidevtools/swagger-parser.
3
+ * We don't actually use swagger-parser in the browser - we use @readme/openapi-parser.
4
+ * This shim prevents bundling issues from transitive dependencies.
5
+ */
6
+ /**
7
+ * Stub SwaggerParser that does nothing
8
+ */
9
+ export declare function SwaggerParser(): void;
10
+ export declare namespace SwaggerParser {
11
+ var parse: (schema: any) => Promise<any>;
12
+ var resolve: (schema: any) => Promise<{
13
+ schema: any;
14
+ $refs: {};
15
+ }>;
16
+ var bundle: (schema: any) => Promise<any>;
17
+ var dereference: (schema: any) => Promise<any>;
18
+ var validate: (schema: any) => Promise<any>;
19
+ }
20
+ export default SwaggerParser;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Browser shim for @apidevtools/swagger-parser.
4
+ * We don't actually use swagger-parser in the browser - we use @readme/openapi-parser.
5
+ * This shim prevents bundling issues from transitive dependencies.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SwaggerParser = void 0;
9
+ /**
10
+ * Stub SwaggerParser that does nothing
11
+ */
12
+ function SwaggerParser() {
13
+ // Empty constructor
14
+ }
15
+ exports.SwaggerParser = SwaggerParser;
16
+ SwaggerParser.prototype = {
17
+ schema: {},
18
+ api: {},
19
+ $refs: {
20
+ circular: false,
21
+ paths: () => [],
22
+ values: () => ({}),
23
+ get: () => undefined
24
+ },
25
+ parse: async (schema) => schema,
26
+ async resolve() {
27
+ return this;
28
+ },
29
+ bundle: async (schema) => schema,
30
+ dereference: async (schema) => schema,
31
+ validate: async (schema) => schema
32
+ };
33
+ // Static methods
34
+ SwaggerParser.parse = async (schema) => schema;
35
+ SwaggerParser.resolve = async (schema) => ({ schema, $refs: {} });
36
+ SwaggerParser.bundle = async (schema) => schema;
37
+ SwaggerParser.dereference = async (schema) => schema;
38
+ SwaggerParser.validate = async (schema) => schema;
39
+ // Default export
40
+ exports.default = SwaggerParser;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Builds the public configuration JSON Schema from the Zod source of truth.
3
+ * Filters disabled presets out of every top-level configuration branch and
4
+ * keeps the schema's $ref graph internally consistent.
5
+ */
6
+ import { type PostProcessCallback } from 'zod-to-json-schema';
7
+ /**
8
+ * Note: removing entries from a `anyOf` array shifts the indices of the
9
+ * remaining entries, which would invalidate any sibling `$ref` that points to
10
+ * a later index. The current default `disabledPresets = ['custom']` is safe
11
+ * because `custom` sits at the highest index in every union (AsyncAPI 7,
12
+ * OpenAPI 6, JSON Schema 1) — there are no later indices to break. A future
13
+ * maintainer disabling a non-last preset must add index renumbering here.
14
+ */
15
+ export declare function buildConfigurationSchema(postProcess: PostProcessCallback, disabledPresets?: readonly string[]): Record<string, unknown>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildConfigurationSchema = void 0;
4
+ /**
5
+ * Builds the public configuration JSON Schema from the Zod source of truth.
6
+ * Filters disabled presets out of every top-level configuration branch and
7
+ * keeps the schema's $ref graph internally consistent.
8
+ */
9
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
10
+ const types_1 = require("./types");
11
+ const DEFAULT_DISABLED_PRESETS = ['custom'];
12
+ const ASYNCAPI_REF_PREFIX = '#/definitions/AsyncAPICodegenConfiguration/properties/generators/items/anyOf/';
13
+ /**
14
+ * Note: removing entries from a `anyOf` array shifts the indices of the
15
+ * remaining entries, which would invalidate any sibling `$ref` that points to
16
+ * a later index. The current default `disabledPresets = ['custom']` is safe
17
+ * because `custom` sits at the highest index in every union (AsyncAPI 7,
18
+ * OpenAPI 6, JSON Schema 1) — there are no later indices to break. A future
19
+ * maintainer disabling a non-last preset must add index renumbering here.
20
+ */
21
+ function buildConfigurationSchema(postProcess, disabledPresets = DEFAULT_DISABLED_PRESETS) {
22
+ const schema = (0, zod_to_json_schema_1.zodToJsonSchema)(types_1.zodTheCodegenConfiguration, {
23
+ definitions: {
24
+ AsyncAPICodegenConfiguration: types_1.zodAsyncAPICodegenConfiguration
25
+ },
26
+ postProcess
27
+ });
28
+ const asyncapiAnyOf = schema.definitions.AsyncAPICodegenConfiguration.properties.generators.items
29
+ .anyOf;
30
+ const disabledRefs = new Set();
31
+ asyncapiAnyOf.forEach((entry, i) => {
32
+ if (disabledPresets.includes(entry?.properties?.preset?.const)) {
33
+ disabledRefs.add(`${ASYNCAPI_REF_PREFIX}${i}`);
34
+ }
35
+ });
36
+ const isDisabled = (entry) => disabledPresets.includes(entry?.properties?.preset?.const) ||
37
+ (typeof entry?.$ref === 'string' && disabledRefs.has(entry.$ref));
38
+ for (const branch of schema.anyOf ?? []) {
39
+ const items = branch?.properties?.generators?.items;
40
+ if (Array.isArray(items?.anyOf)) {
41
+ items.anyOf = items.anyOf.filter((entry) => !isDisabled(entry));
42
+ }
43
+ }
44
+ schema.definitions.AsyncAPICodegenConfiguration.properties.generators.items.anyOf =
45
+ asyncapiAnyOf.filter((entry) => !isDisabled(entry));
46
+ return schema;
47
+ }
48
+ exports.buildConfigurationSchema = buildConfigurationSchema;
@@ -0,0 +1,29 @@
1
+ import { TheCodegenConfiguration, TheCodegenConfigurationInternal, RunGeneratorContext, PresetTypes, SupportedLanguages, GeneratorsInternal } from './types';
2
+ /**
3
+ * Load configuration from file.
4
+ */
5
+ export declare function loadConfigFile(filePath?: string): Promise<{
6
+ config: TheCodegenConfiguration;
7
+ filePath: string;
8
+ }>;
9
+ /**
10
+ * Load the configuration file and realize it with default options if necessary.
11
+ */
12
+ export declare function loadAndRealizeConfigFile(filePath?: string): Promise<{
13
+ config: TheCodegenConfigurationInternal;
14
+ filePath: string;
15
+ }>;
16
+ /**
17
+ * Ensure that each generator has the default options along side custom properties
18
+ */
19
+ export declare function realizeConfiguration(config: TheCodegenConfiguration): TheCodegenConfigurationInternal;
20
+ /**
21
+ * Returns the default generator for the preset of the language
22
+ */
23
+ export declare function getDefaultConfiguration(preset: PresetTypes, language: SupportedLanguages): GeneratorsInternal | undefined;
24
+ /**
25
+ * Load configuration and input document to create generator context
26
+ *
27
+ * @param configFile
28
+ */
29
+ export declare function realizeGeneratorContext(configFile: string | undefined): Promise<RunGeneratorContext>;
@@ -0,0 +1,260 @@
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.realizeGeneratorContext = exports.getDefaultConfiguration = exports.realizeConfiguration = exports.loadAndRealizeConfigFile = exports.loadConfigFile = void 0;
7
+ const types_1 = require("./types");
8
+ const generators_1 = require("./generators");
9
+ const LoggingInterface_1 = require("../LoggingInterface");
10
+ const channels_1 = require("./generators/typescript/channels");
11
+ const utils_1 = require("./utils");
12
+ const cosmiconfig_1 = require("cosmiconfig");
13
+ const client_1 = require("./generators/typescript/client");
14
+ const path_1 = __importDefault(require("path"));
15
+ const asyncapi_1 = require("./inputs/asyncapi");
16
+ const openapi_1 = require("./inputs/openapi");
17
+ const jsonschema_1 = require("./inputs/jsonschema");
18
+ const typescript_1 = require("./generators/typescript");
19
+ const models_1 = require("./generators/typescript/models");
20
+ const errors_1 = require("./errors");
21
+ const detection_1 = require("./detection");
22
+ const inputSource_1 = require("../utils/inputSource");
23
+ const moduleName = 'codegen';
24
+ const explorer = (0, cosmiconfig_1.cosmiconfig)(moduleName, {
25
+ searchPlaces: [
26
+ `${moduleName}.json`,
27
+ `${moduleName}.yaml`,
28
+ `${moduleName}.yml`,
29
+ `${moduleName}.js`,
30
+ `${moduleName}.ts`,
31
+ `${moduleName}.mjs`,
32
+ `${moduleName}.cjs`
33
+ ],
34
+ mergeSearchPlaces: true
35
+ });
36
+ /**
37
+ * Load configuration from file.
38
+ */
39
+ async function loadConfigFile(filePath) {
40
+ let cosmiConfig;
41
+ if (filePath) {
42
+ try {
43
+ cosmiConfig = await explorer.load(filePath);
44
+ }
45
+ catch (error) {
46
+ // Check if it's actually a file-not-found error
47
+ if (error.code === 'ENOENT' || error.message?.includes('ENOENT')) {
48
+ throw (0, errors_1.createConfigNotFoundError)({ filePath });
49
+ }
50
+ // For other errors (syntax, parse, permission, etc.), wrap in parse error
51
+ throw (0, errors_1.createConfigParseError)({ filePath, originalError: error });
52
+ }
53
+ }
54
+ else {
55
+ cosmiConfig = await explorer.search();
56
+ if (!cosmiConfig) {
57
+ const searchLocations = [
58
+ 'codegen.json',
59
+ 'codegen.yaml',
60
+ 'codegen.yml',
61
+ 'codegen.js',
62
+ 'codegen.ts',
63
+ 'codegen.mjs',
64
+ 'codegen.cjs'
65
+ ];
66
+ throw (0, errors_1.createConfigNotFoundError)({ searchLocations });
67
+ }
68
+ }
69
+ let codegenConfig;
70
+ if (typeof cosmiConfig.config.default === 'function') {
71
+ codegenConfig = cosmiConfig.config.default();
72
+ }
73
+ else if (typeof cosmiConfig.config.default === 'object') {
74
+ codegenConfig = cosmiConfig.config.default;
75
+ }
76
+ else {
77
+ codegenConfig = cosmiConfig.config;
78
+ }
79
+ return {
80
+ config: codegenConfig,
81
+ filePath: cosmiConfig.filepath
82
+ };
83
+ }
84
+ exports.loadConfigFile = loadConfigFile;
85
+ /**
86
+ * Load the configuration file and realize it with default options if necessary.
87
+ */
88
+ async function loadAndRealizeConfigFile(filePath) {
89
+ const codegenConfig = await loadConfigFile(filePath);
90
+ const realizedConfiguration = realizeConfiguration(codegenConfig.config);
91
+ return {
92
+ config: realizedConfiguration,
93
+ filePath: codegenConfig.filePath
94
+ };
95
+ }
96
+ exports.loadAndRealizeConfigFile = loadAndRealizeConfigFile;
97
+ /**
98
+ * Ensure that each generator has the default options along side custom properties
99
+ */
100
+ function realizeConfiguration(config) {
101
+ config.generators = config.generators ?? [];
102
+ const generatorIds = [];
103
+ for (const [index, generator] of config.generators.entries()) {
104
+ const language = generator.language ?? config.language ?? 'typescript';
105
+ if (!generator?.preset) {
106
+ continue;
107
+ }
108
+ const defaultGenerator = getDefaultConfiguration(generator.preset, language);
109
+ if (!defaultGenerator) {
110
+ throw (0, errors_1.createInvalidPresetError)({ preset: generator.preset, language });
111
+ }
112
+ const generatorToUse = (0, utils_1.mergePartialAndDefault)(defaultGenerator, generator);
113
+ const oldId = generatorToUse.id;
114
+ // Make sure that each generator has unique ids if they dont explicit define one
115
+ if (generatorToUse.id === defaultGenerator.id) {
116
+ const duplicateGenerators = generatorIds.filter((generatorId) => generatorId === generatorToUse.id);
117
+ if (duplicateGenerators.length > 0) {
118
+ generatorToUse.id = `${generatorToUse.id}-${duplicateGenerators.length}`;
119
+ }
120
+ }
121
+ generatorIds.push(oldId);
122
+ // eslint-disable-next-line security/detect-object-injection
123
+ config.generators[index] = generatorToUse;
124
+ }
125
+ try {
126
+ types_1.zodTheCodegenConfiguration.parse(config);
127
+ }
128
+ catch (e) {
129
+ const errors = (0, errors_1.parseZodErrors)(e);
130
+ // Log each error for debugging
131
+ errors.forEach((error) => LoggingInterface_1.Logger.error(error));
132
+ throw (0, errors_1.createConfigValidationError)({ validationErrors: errors });
133
+ }
134
+ const newGenerators = ensureProperGenerators(config);
135
+ config.generators.push(...newGenerators);
136
+ return config;
137
+ }
138
+ exports.realizeConfiguration = realizeConfiguration;
139
+ /**
140
+ * Ensure that all generators have their dependency default generators.
141
+ *
142
+ * For example, for typescript channels, include default payload and parameter generators if not explicitly sat.
143
+ *
144
+ * This is done recursively.
145
+ */
146
+ function ensureProperGenerators(config) {
147
+ const iterateGenerators = (generators) => {
148
+ const newGenerators = [];
149
+ for (const generator of generators) {
150
+ const language = generator.language ?? config.language;
151
+ if (generator.preset === 'channels' && language === 'typescript') {
152
+ newGenerators.push(...(0, channels_1.includeTypeScriptChannelDependencies)(config, generator));
153
+ }
154
+ if (generator.preset === 'client' && language === 'typescript') {
155
+ newGenerators.push(...(0, client_1.includeTypeScriptClientDependencies)(config, generator));
156
+ }
157
+ }
158
+ if (newGenerators.length > 0) {
159
+ newGenerators.push(...iterateGenerators(newGenerators));
160
+ }
161
+ return newGenerators;
162
+ };
163
+ return iterateGenerators(Array.from(config.generators.values()));
164
+ }
165
+ /**
166
+ * Returns the default generator for the preset of the language
167
+ */
168
+ function getDefaultConfiguration(preset, language) {
169
+ switch (preset) {
170
+ case 'payloads':
171
+ switch (language) {
172
+ case 'typescript':
173
+ return generators_1.defaultTypeScriptPayloadGenerator;
174
+ }
175
+ break;
176
+ case 'headers':
177
+ switch (language) {
178
+ case 'typescript':
179
+ return typescript_1.defaultTypeScriptHeadersOptions;
180
+ }
181
+ break;
182
+ case 'types':
183
+ switch (language) {
184
+ case 'typescript':
185
+ return typescript_1.defaultTypeScriptTypesOptions;
186
+ }
187
+ break;
188
+ case 'models':
189
+ switch (language) {
190
+ case 'typescript':
191
+ return models_1.defaultTypeScriptModelsOptions;
192
+ }
193
+ break;
194
+ case 'channels':
195
+ switch (language) {
196
+ case 'typescript':
197
+ return channels_1.defaultTypeScriptChannelsGenerator;
198
+ }
199
+ break;
200
+ case 'client':
201
+ switch (language) {
202
+ case 'typescript':
203
+ return client_1.defaultTypeScriptClientGenerator;
204
+ }
205
+ break;
206
+ case 'custom':
207
+ return generators_1.defaultCustomGenerator;
208
+ case 'parameters':
209
+ switch (language) {
210
+ case 'typescript':
211
+ return generators_1.defaultTypeScriptParametersOptions;
212
+ }
213
+ break;
214
+ }
215
+ return undefined;
216
+ }
217
+ exports.getDefaultConfiguration = getDefaultConfiguration;
218
+ /**
219
+ * Load configuration and input document to create generator context
220
+ *
221
+ * @param configFile
222
+ */
223
+ async function realizeGeneratorContext(configFile) {
224
+ const { config, filePath } = await loadAndRealizeConfigFile(configFile);
225
+ // Apply automatic project detection if importExtension not explicitly set
226
+ if (config.importExtension === undefined) {
227
+ const projectDir = path_1.default.dirname(filePath);
228
+ const detected = await (0, detection_1.detectTypeScriptImportExtension)(projectDir);
229
+ if (detected !== null) {
230
+ config.importExtension = detected;
231
+ LoggingInterface_1.Logger.info(`Auto-detected importExtension: '${detected}'`);
232
+ }
233
+ }
234
+ LoggingInterface_1.Logger.debug(`Found configuration: ${JSON.stringify(config, null, 2)}`);
235
+ const documentPath = (0, inputSource_1.isRemoteUrl)(config.inputPath)
236
+ ? config.inputPath
237
+ : path_1.default.resolve(path_1.default.dirname(filePath), config.inputPath);
238
+ LoggingInterface_1.Logger.verbose(`Document path: ${documentPath}`);
239
+ LoggingInterface_1.Logger.verbose(`Input type: ${config.inputType}`);
240
+ const context = {
241
+ configuration: config,
242
+ documentPath,
243
+ inputAuth: config.auth,
244
+ configFilePath: filePath
245
+ };
246
+ if (config.inputType === 'asyncapi') {
247
+ const document = await (0, asyncapi_1.loadAsyncapi)(context);
248
+ context.asyncapiDocument = document;
249
+ }
250
+ else if (config.inputType === 'openapi') {
251
+ const document = await (0, openapi_1.loadOpenapi)(context);
252
+ context.openapiDocument = document;
253
+ }
254
+ else if (config.inputType === 'jsonschema') {
255
+ const document = await (0, jsonschema_1.loadJsonSchema)(context);
256
+ context.jsonSchemaDocument = document;
257
+ }
258
+ return context;
259
+ }
260
+ exports.realizeGeneratorContext = realizeGeneratorContext;
@@ -0,0 +1,19 @@
1
+ import type { ImportExtension } from './utils';
2
+ /**
3
+ * Detects appropriate import extension based on project configuration.
4
+ *
5
+ * Detection priority:
6
+ * 1. Bundler config files present → 'none'
7
+ * 2. Bundler in dependencies → 'none'
8
+ * 3. moduleResolution: 'bundler' → 'none'
9
+ * 4. moduleResolution: 'node16'/'nodenext' (or inferred from module) + allowImportingTsExtensions → '.ts'
10
+ * 5. moduleResolution: 'node16'/'nodenext' (or inferred from module) → '.js'
11
+ * 6. Otherwise → null (use default)
12
+ *
13
+ * Note: If moduleResolution is not set but module is 'Node16' or 'NodeNext',
14
+ * moduleResolution is inferred per TypeScript's behavior.
15
+ *
16
+ * @param projectDir - Directory to analyze (where package.json/tsconfig.json are)
17
+ * @returns Detected import extension or null if no detection could be made
18
+ */
19
+ export declare function detectTypeScriptImportExtension(projectDir: string): Promise<ImportExtension | null>;
@@ -0,0 +1,174 @@
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.detectTypeScriptImportExtension = void 0;
7
+ /**
8
+ * Project settings detection for automatic configuration.
9
+ * Detects TypeScript module resolution settings and bundler presence
10
+ * to set intelligent defaults for importExtension.
11
+ */
12
+ const fs_1 = require("fs");
13
+ const path_1 = __importDefault(require("path"));
14
+ const comment_json_1 = require("comment-json");
15
+ const LoggingInterface_1 = require("../LoggingInterface");
16
+ /** Bundler packages that indicate no extension is needed */
17
+ const BUNDLER_DEPS = new Set([
18
+ 'webpack',
19
+ 'vite',
20
+ 'esbuild',
21
+ 'rollup',
22
+ 'parcel',
23
+ 'turbopack',
24
+ 'next',
25
+ '@rspack/core'
26
+ ]);
27
+ /** Bundler config files that indicate no extension is needed */
28
+ const BUNDLER_CONFIGS = [
29
+ 'vite.config.ts',
30
+ 'vite.config.js',
31
+ 'vite.config.mjs',
32
+ 'webpack.config.js',
33
+ 'webpack.config.ts',
34
+ 'webpack.config.mjs',
35
+ 'rollup.config.js',
36
+ 'rollup.config.ts',
37
+ 'rollup.config.mjs',
38
+ 'next.config.js',
39
+ 'next.config.ts',
40
+ 'next.config.mjs',
41
+ 'esbuild.config.js',
42
+ 'esbuild.config.mjs',
43
+ 'rspack.config.js',
44
+ 'rspack.config.ts',
45
+ 'rspack.config.mjs'
46
+ ];
47
+ /**
48
+ * Safely read and parse JSON file, returning null on any error.
49
+ * For tsconfig.json, uses JSONC parsing (via comment-json) to handle comments and trailing commas.
50
+ */
51
+ function readJsonFile(filePath, allowJsonc = false) {
52
+ try {
53
+ const content = (0, fs_1.readFileSync)(filePath, 'utf8');
54
+ if (allowJsonc) {
55
+ return (0, comment_json_1.parse)(content);
56
+ }
57
+ return JSON.parse(content);
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * Check for bundler config files in the project directory.
65
+ */
66
+ function detectBundlerConfigFile(projectDir) {
67
+ for (const configFile of BUNDLER_CONFIGS) {
68
+ const configPath = path_1.default.join(projectDir, configFile);
69
+ if ((0, fs_1.existsSync)(configPath)) {
70
+ return configFile;
71
+ }
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Check for bundler dependencies in package.json.
77
+ */
78
+ function detectBundlerDependency(packageJson) {
79
+ const allDeps = Object.keys({
80
+ ...packageJson.dependencies,
81
+ ...packageJson.devDependencies
82
+ });
83
+ for (const dep of allDeps) {
84
+ if (BUNDLER_DEPS.has(dep)) {
85
+ return dep;
86
+ }
87
+ }
88
+ return null;
89
+ }
90
+ /**
91
+ * Determine import extension from tsconfig moduleResolution setting.
92
+ * If moduleResolution is undefined, infers it from the module setting per TypeScript rules.
93
+ */
94
+ function detectFromModuleResolution(moduleRes, module, allowTsExtensions) {
95
+ // Infer moduleResolution from module if not explicitly set
96
+ // TypeScript infers: "Node16" → "node16", "NodeNext" → "nodenext"
97
+ let resolution = moduleRes?.toLowerCase();
98
+ if (!resolution && module) {
99
+ const moduleLower = module.toLowerCase();
100
+ if (moduleLower === 'node16' || moduleLower === 'nodenext') {
101
+ resolution = moduleLower;
102
+ LoggingInterface_1.Logger.verbose(`Inferred moduleResolution: ${resolution} from module: ${module}`);
103
+ }
104
+ }
105
+ if (resolution === 'bundler') {
106
+ LoggingInterface_1.Logger.verbose(`Auto-detected moduleResolution: bundler → importExtension: 'none'`);
107
+ return 'none';
108
+ }
109
+ if (resolution === 'node16' || resolution === 'nodenext') {
110
+ if (allowTsExtensions) {
111
+ LoggingInterface_1.Logger.verbose(`Auto-detected moduleResolution: ${resolution} with allowImportingTsExtensions → importExtension: '.ts'`);
112
+ return '.ts';
113
+ }
114
+ LoggingInterface_1.Logger.verbose(`Auto-detected moduleResolution: ${resolution} → importExtension: '.js'`);
115
+ return '.js';
116
+ }
117
+ return null;
118
+ }
119
+ /**
120
+ * Detects appropriate import extension based on project configuration.
121
+ *
122
+ * Detection priority:
123
+ * 1. Bundler config files present → 'none'
124
+ * 2. Bundler in dependencies → 'none'
125
+ * 3. moduleResolution: 'bundler' → 'none'
126
+ * 4. moduleResolution: 'node16'/'nodenext' (or inferred from module) + allowImportingTsExtensions → '.ts'
127
+ * 5. moduleResolution: 'node16'/'nodenext' (or inferred from module) → '.js'
128
+ * 6. Otherwise → null (use default)
129
+ *
130
+ * Note: If moduleResolution is not set but module is 'Node16' or 'NodeNext',
131
+ * moduleResolution is inferred per TypeScript's behavior.
132
+ *
133
+ * @param projectDir - Directory to analyze (where package.json/tsconfig.json are)
134
+ * @returns Detected import extension or null if no detection could be made
135
+ */
136
+ async function detectTypeScriptImportExtension(projectDir) {
137
+ try {
138
+ // Step 1: Check for bundler config files
139
+ const bundlerConfig = detectBundlerConfigFile(projectDir);
140
+ if (bundlerConfig) {
141
+ LoggingInterface_1.Logger.verbose(`Auto-detected bundler config: ${bundlerConfig} → importExtension: 'none'`);
142
+ return 'none';
143
+ }
144
+ // Step 2: Check package.json for bundler dependencies
145
+ const packageJsonPath = path_1.default.join(projectDir, 'package.json');
146
+ const packageJson = readJsonFile(packageJsonPath);
147
+ if (packageJson) {
148
+ const bundlerDep = detectBundlerDependency(packageJson);
149
+ if (bundlerDep) {
150
+ LoggingInterface_1.Logger.verbose(`Auto-detected bundler dependency: ${bundlerDep} → importExtension: 'none'`);
151
+ return 'none';
152
+ }
153
+ }
154
+ // Step 3: Read tsconfig.json for moduleResolution (use JSONC parser)
155
+ const tsconfigPath = path_1.default.join(projectDir, 'tsconfig.json');
156
+ const tsconfig = readJsonFile(tsconfigPath, true);
157
+ if (!tsconfig) {
158
+ LoggingInterface_1.Logger.verbose('Could not read tsconfig.json, skipping import extension detection');
159
+ return null;
160
+ }
161
+ const options = tsconfig.compilerOptions;
162
+ if (!options) {
163
+ LoggingInterface_1.Logger.verbose('No compilerOptions in tsconfig.json');
164
+ return null;
165
+ }
166
+ // Step 4: Check moduleResolution (with inference from module if needed)
167
+ return detectFromModuleResolution(options.moduleResolution, options.module, options.allowImportingTsExtensions);
168
+ }
169
+ catch (error) {
170
+ LoggingInterface_1.Logger.verbose(`Project detection failed: ${error}`);
171
+ return null;
172
+ }
173
+ }
174
+ exports.detectTypeScriptImportExtension = detectTypeScriptImportExtension;