@asyncapi-actions-test/trusted-publishing-test_asyncapi-cli 4.1.3

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 (257) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +117 -0
  3. package/assets/create-template/templates/default/asyncapi.yaml +34 -0
  4. package/assets/create-template/templates/default/package-lock.json +4062 -0
  5. package/assets/create-template/templates/default/package.json +10 -0
  6. package/assets/create-template/templates/default/readme.md +4 -0
  7. package/assets/create-template/templates/default/template/index.js +11 -0
  8. package/assets/examples/adeo-kafka-request-reply-asyncapi.yml +298 -0
  9. package/assets/examples/anyof-asyncapi.yml +36 -0
  10. package/assets/examples/application-headers-asyncapi.yml +86 -0
  11. package/assets/examples/correlation-id-asyncapi.yml +180 -0
  12. package/assets/examples/default-example.json +51 -0
  13. package/assets/examples/default-example.yaml +31 -0
  14. package/assets/examples/examples.json +82 -0
  15. package/assets/examples/gitter-streaming-asyncapi.yml +178 -0
  16. package/assets/examples/kraken-websocket-request-reply-message-filter-in-reply-asyncapi.yml +388 -0
  17. package/assets/examples/kraken-websocket-request-reply-multiple-channels-asyncapi.yml +394 -0
  18. package/assets/examples/mercure-asyncapi.yml +58 -0
  19. package/assets/examples/not-asyncapi.yml +29 -0
  20. package/assets/examples/oneof-asyncapi.yml +57 -0
  21. package/assets/examples/operation-security-asyncapi.yml +117 -0
  22. package/assets/examples/rpc-client-asyncapi.yml +72 -0
  23. package/assets/examples/rpc-server-asyncapi.yml +69 -0
  24. package/assets/examples/simple-asyncapi.yml +31 -0
  25. package/assets/examples/slack-rtm-asyncapi.yml +982 -0
  26. package/assets/examples/streetlights-kafka-asyncapi.yml +199 -0
  27. package/assets/examples/streetlights-mqtt-asyncapi.yml +253 -0
  28. package/assets/examples/streetlights-operation-security-asyncapi.yml +240 -0
  29. package/assets/examples/tutorial.yml +41 -0
  30. package/assets/examples/websocket-gemini-asyncapi.yml +301 -0
  31. package/assets/logo.png +0 -0
  32. package/assets/server-api.png +0 -0
  33. package/bin/dev +17 -0
  34. package/bin/dev.cmd +3 -0
  35. package/bin/run +12 -0
  36. package/bin/run.cmd +3 -0
  37. package/bin/run_bin +13 -0
  38. package/bin/run_bin.cmd +3 -0
  39. package/lib/apps/api/app.d.ts +15 -0
  40. package/lib/apps/api/app.js +91 -0
  41. package/lib/apps/api/configs/development.json +16 -0
  42. package/lib/apps/api/configs/production.json +16 -0
  43. package/lib/apps/api/configs/test.json +16 -0
  44. package/lib/apps/api/constants.d.ts +1 -0
  45. package/lib/apps/api/constants.js +4 -0
  46. package/lib/apps/api/controllers/bundle.controller.d.ts +7 -0
  47. package/lib/apps/api/controllers/bundle.controller.js +44 -0
  48. package/lib/apps/api/controllers/convert.controller.d.ts +11 -0
  49. package/lib/apps/api/controllers/convert.controller.js +69 -0
  50. package/lib/apps/api/controllers/diff.controller.d.ts +7 -0
  51. package/lib/apps/api/controllers/diff.controller.js +42 -0
  52. package/lib/apps/api/controllers/docs.controller.d.ts +6 -0
  53. package/lib/apps/api/controllers/docs.controller.js +24 -0
  54. package/lib/apps/api/controllers/generate.controller.d.ts +22 -0
  55. package/lib/apps/api/controllers/generate.controller.js +174 -0
  56. package/lib/apps/api/controllers/help.controller.d.ts +6 -0
  57. package/lib/apps/api/controllers/help.controller.js +101 -0
  58. package/lib/apps/api/controllers/parse.controller.d.ts +10 -0
  59. package/lib/apps/api/controllers/parse.controller.js +35 -0
  60. package/lib/apps/api/controllers/validate.controller.d.ts +10 -0
  61. package/lib/apps/api/controllers/validate.controller.js +50 -0
  62. package/lib/apps/api/controllers/version.controller.d.ts +8 -0
  63. package/lib/apps/api/controllers/version.controller.js +69 -0
  64. package/lib/apps/api/exceptions/problem.exception.d.ts +14 -0
  65. package/lib/apps/api/exceptions/problem.exception.js +10 -0
  66. package/lib/apps/api/index.d.ts +10 -0
  67. package/lib/apps/api/index.js +23 -0
  68. package/lib/apps/api/middlewares/logger.middleware.d.ts +2 -0
  69. package/lib/apps/api/middlewares/logger.middleware.js +12 -0
  70. package/lib/apps/api/middlewares/problem.middleware.d.ts +6 -0
  71. package/lib/apps/api/middlewares/problem.middleware.js +27 -0
  72. package/lib/apps/api/middlewares/validation.middleware.d.ts +12 -0
  73. package/lib/apps/api/middlewares/validation.middleware.js +245 -0
  74. package/lib/apps/api/server.d.ts +3 -0
  75. package/lib/apps/api/server.js +19 -0
  76. package/lib/apps/cli/commands/bundle.d.ts +15 -0
  77. package/lib/apps/cli/commands/bundle.js +75 -0
  78. package/lib/apps/cli/commands/config/analytics.d.ts +11 -0
  79. package/lib/apps/cli/commands/config/analytics.js +61 -0
  80. package/lib/apps/cli/commands/config/auth/add.d.ts +13 -0
  81. package/lib/apps/cli/commands/config/auth/add.js +68 -0
  82. package/lib/apps/cli/commands/config/context/add.d.ts +13 -0
  83. package/lib/apps/cli/commands/config/context/add.js +46 -0
  84. package/lib/apps/cli/commands/config/context/current.d.ts +8 -0
  85. package/lib/apps/cli/commands/config/context/current.js +37 -0
  86. package/lib/apps/cli/commands/config/context/edit.d.ts +12 -0
  87. package/lib/apps/cli/commands/config/context/edit.js +44 -0
  88. package/lib/apps/cli/commands/config/context/index.d.ts +5 -0
  89. package/lib/apps/cli/commands/config/context/index.js +16 -0
  90. package/lib/apps/cli/commands/config/context/init.d.ts +12 -0
  91. package/lib/apps/cli/commands/config/context/init.js +31 -0
  92. package/lib/apps/cli/commands/config/context/list.d.ts +8 -0
  93. package/lib/apps/cli/commands/config/context/list.js +36 -0
  94. package/lib/apps/cli/commands/config/context/remove.d.ts +11 -0
  95. package/lib/apps/cli/commands/config/context/remove.js +39 -0
  96. package/lib/apps/cli/commands/config/context/use.d.ts +11 -0
  97. package/lib/apps/cli/commands/config/context/use.js +40 -0
  98. package/lib/apps/cli/commands/config/index.d.ts +5 -0
  99. package/lib/apps/cli/commands/config/index.js +16 -0
  100. package/lib/apps/cli/commands/config/versions.d.ts +8 -0
  101. package/lib/apps/cli/commands/config/versions.js +56 -0
  102. package/lib/apps/cli/commands/convert.d.ts +21 -0
  103. package/lib/apps/cli/commands/convert.js +85 -0
  104. package/lib/apps/cli/commands/diff.d.ts +36 -0
  105. package/lib/apps/cli/commands/diff.js +335 -0
  106. package/lib/apps/cli/commands/format.d.ts +18 -0
  107. package/lib/apps/cli/commands/format.js +97 -0
  108. package/lib/apps/cli/commands/generate/client.d.ts +30 -0
  109. package/lib/apps/cli/commands/generate/client.js +94 -0
  110. package/lib/apps/cli/commands/generate/fromTemplate.d.ts +29 -0
  111. package/lib/apps/cli/commands/generate/fromTemplate.js +91 -0
  112. package/lib/apps/cli/commands/generate/index.d.ts +5 -0
  113. package/lib/apps/cli/commands/generate/index.js +15 -0
  114. package/lib/apps/cli/commands/generate/models.d.ts +16 -0
  115. package/lib/apps/cli/commands/generate/models.js +166 -0
  116. package/lib/apps/cli/commands/new/file.d.ts +16 -0
  117. package/lib/apps/cli/commands/new/file.js +180 -0
  118. package/lib/apps/cli/commands/new/index.d.ts +5 -0
  119. package/lib/apps/cli/commands/new/index.js +15 -0
  120. package/lib/apps/cli/commands/new/template.d.ts +18 -0
  121. package/lib/apps/cli/commands/new/template.js +102 -0
  122. package/lib/apps/cli/commands/optimize.d.ts +41 -0
  123. package/lib/apps/cli/commands/optimize.js +289 -0
  124. package/lib/apps/cli/commands/pretty.d.ts +12 -0
  125. package/lib/apps/cli/commands/pretty.js +70 -0
  126. package/lib/apps/cli/commands/start/api.d.ts +11 -0
  127. package/lib/apps/cli/commands/start/api.js +23 -0
  128. package/lib/apps/cli/commands/start/index.d.ts +5 -0
  129. package/lib/apps/cli/commands/start/index.js +15 -0
  130. package/lib/apps/cli/commands/start/preview.d.ts +17 -0
  131. package/lib/apps/cli/commands/start/preview.js +41 -0
  132. package/lib/apps/cli/commands/start/studio.d.ts +16 -0
  133. package/lib/apps/cli/commands/start/studio.js +94 -0
  134. package/lib/apps/cli/commands/validate.d.ts +23 -0
  135. package/lib/apps/cli/commands/validate.js +95 -0
  136. package/lib/apps/cli/internal/args/generate.args.d.ts +3 -0
  137. package/lib/apps/cli/internal/args/generate.args.js +10 -0
  138. package/lib/apps/cli/internal/base/BaseGeneratorCommand.d.ts +42 -0
  139. package/lib/apps/cli/internal/base/BaseGeneratorCommand.js +119 -0
  140. package/lib/apps/cli/internal/base.d.ts +20 -0
  141. package/lib/apps/cli/internal/base.js +173 -0
  142. package/lib/apps/cli/internal/flags/bundle.flags.d.ts +7 -0
  143. package/lib/apps/cli/internal/flags/bundle.flags.js +26 -0
  144. package/lib/apps/cli/internal/flags/config/analytics.flags.d.ts +6 -0
  145. package/lib/apps/cli/internal/flags/config/analytics.flags.js +24 -0
  146. package/lib/apps/cli/internal/flags/config/context.flags.d.ts +4 -0
  147. package/lib/apps/cli/internal/flags/config/context.flags.js +16 -0
  148. package/lib/apps/cli/internal/flags/convert.flags.d.ts +7 -0
  149. package/lib/apps/cli/internal/flags/convert.flags.js +32 -0
  150. package/lib/apps/cli/internal/flags/diff.flags.d.ts +13 -0
  151. package/lib/apps/cli/internal/flags/diff.flags.js +29 -0
  152. package/lib/apps/cli/internal/flags/format.flags.d.ts +6 -0
  153. package/lib/apps/cli/internal/flags/format.flags.js +22 -0
  154. package/lib/apps/cli/internal/flags/generate/clients.flags.d.ts +16 -0
  155. package/lib/apps/cli/internal/flags/generate/clients.flags.js +8 -0
  156. package/lib/apps/cli/internal/flags/generate/fromTemplate.flags.d.ts +16 -0
  157. package/lib/apps/cli/internal/flags/generate/fromTemplate.flags.js +8 -0
  158. package/lib/apps/cli/internal/flags/generate/models.flags.d.ts +1 -0
  159. package/lib/apps/cli/internal/flags/generate/models.flags.js +14 -0
  160. package/lib/apps/cli/internal/flags/generate/sharedFlags.d.ts +16 -0
  161. package/lib/apps/cli/internal/flags/generate/sharedFlags.js +57 -0
  162. package/lib/apps/cli/internal/flags/global.flags.d.ts +4 -0
  163. package/lib/apps/cli/internal/flags/global.flags.js +18 -0
  164. package/lib/apps/cli/internal/flags/new/file.flags.d.ts +8 -0
  165. package/lib/apps/cli/internal/flags/new/file.flags.js +20 -0
  166. package/lib/apps/cli/internal/flags/new/template.flags.d.ts +7 -0
  167. package/lib/apps/cli/internal/flags/new/template.flags.js +28 -0
  168. package/lib/apps/cli/internal/flags/optimize.flags.d.ts +21 -0
  169. package/lib/apps/cli/internal/flags/optimize.flags.js +51 -0
  170. package/lib/apps/cli/internal/flags/parser.flags.d.ts +10 -0
  171. package/lib/apps/cli/internal/flags/parser.flags.js +28 -0
  172. package/lib/apps/cli/internal/flags/pretty.flags.d.ts +3 -0
  173. package/lib/apps/cli/internal/flags/pretty.flags.js +13 -0
  174. package/lib/apps/cli/internal/flags/proxy.flags.d.ts +4 -0
  175. package/lib/apps/cli/internal/flags/proxy.flags.js +17 -0
  176. package/lib/apps/cli/internal/flags/start/api.flags.d.ts +5 -0
  177. package/lib/apps/cli/internal/flags/start/api.flags.js +20 -0
  178. package/lib/apps/cli/internal/flags/start/preview.flags.d.ts +9 -0
  179. package/lib/apps/cli/internal/flags/start/preview.flags.js +32 -0
  180. package/lib/apps/cli/internal/flags/start/studio.flags.d.ts +7 -0
  181. package/lib/apps/cli/internal/flags/start/studio.flags.js +25 -0
  182. package/lib/apps/cli/internal/flags/validate.flags.d.ts +11 -0
  183. package/lib/apps/cli/internal/flags/validate.flags.js +22 -0
  184. package/lib/apps/cli/internal/globals.d.ts +10 -0
  185. package/lib/apps/cli/internal/globals.js +46 -0
  186. package/lib/apps/cli/internal/hooks/command_not_found/myhook.d.ts +4 -0
  187. package/lib/apps/cli/internal/hooks/command_not_found/myhook.js +85 -0
  188. package/lib/domains/models/Context.d.ts +21 -0
  189. package/lib/domains/models/Context.js +321 -0
  190. package/lib/domains/models/Preview.d.ts +2 -0
  191. package/lib/domains/models/Preview.js +227 -0
  192. package/lib/domains/models/SpecificationFile.d.ts +40 -0
  193. package/lib/domains/models/SpecificationFile.js +295 -0
  194. package/lib/domains/models/Studio.d.ts +2 -0
  195. package/lib/domains/models/Studio.js +182 -0
  196. package/lib/domains/models/generate/ClientLanguages.d.ts +12 -0
  197. package/lib/domains/models/generate/ClientLanguages.js +17 -0
  198. package/lib/domains/models/generate/Flags.d.ts +9 -0
  199. package/lib/domains/models/generate/Flags.js +2 -0
  200. package/lib/domains/services/archiver.service.d.ts +17 -0
  201. package/lib/domains/services/archiver.service.js +53 -0
  202. package/lib/domains/services/base.service.d.ts +6 -0
  203. package/lib/domains/services/base.service.js +26 -0
  204. package/lib/domains/services/config.service.d.ts +42 -0
  205. package/lib/domains/services/config.service.js +95 -0
  206. package/lib/domains/services/convert.service.d.ts +12 -0
  207. package/lib/domains/services/convert.service.js +65 -0
  208. package/lib/domains/services/generator.service.d.ts +15 -0
  209. package/lib/domains/services/generator.service.js +75 -0
  210. package/lib/domains/services/validation.service.d.ts +54 -0
  211. package/lib/domains/services/validation.service.js +375 -0
  212. package/lib/errors/context-error.d.ts +26 -0
  213. package/lib/errors/context-error.js +71 -0
  214. package/lib/errors/diff-error.d.ts +9 -0
  215. package/lib/errors/diff-error.js +27 -0
  216. package/lib/errors/generator-error.d.ts +3 -0
  217. package/lib/errors/generator-error.js +11 -0
  218. package/lib/errors/specification-file.d.ts +18 -0
  219. package/lib/errors/specification-file.js +65 -0
  220. package/lib/errors/validation-error.d.ts +11 -0
  221. package/lib/errors/validation-error.js +55 -0
  222. package/lib/index.d.ts +1 -0
  223. package/lib/index.js +11 -0
  224. package/lib/interfaces/index.d.ts +87 -0
  225. package/lib/interfaces/index.js +7 -0
  226. package/lib/utils/ajv.d.ts +2 -0
  227. package/lib/utils/ajv.js +18 -0
  228. package/lib/utils/app-openapi.d.ts +4 -0
  229. package/lib/utils/app-openapi.js +28 -0
  230. package/lib/utils/generate/flags.d.ts +2 -0
  231. package/lib/utils/generate/flags.js +14 -0
  232. package/lib/utils/generate/mapBaseUrl.d.ts +6 -0
  233. package/lib/utils/generate/mapBaseUrl.js +34 -0
  234. package/lib/utils/generate/parseParams.d.ts +3 -0
  235. package/lib/utils/generate/parseParams.js +58 -0
  236. package/lib/utils/generate/prompts.d.ts +4 -0
  237. package/lib/utils/generate/prompts.js +77 -0
  238. package/lib/utils/generate/registry.d.ts +2 -0
  239. package/lib/utils/generate/registry.js +30 -0
  240. package/lib/utils/generate/watcher.d.ts +51 -0
  241. package/lib/utils/generate/watcher.js +230 -0
  242. package/lib/utils/logger.d.ts +6 -0
  243. package/lib/utils/logger.js +33 -0
  244. package/lib/utils/retrieve-language.d.ts +1 -0
  245. package/lib/utils/retrieve-language.js +9 -0
  246. package/lib/utils/scoreCalculator.d.ts +2 -0
  247. package/lib/utils/scoreCalculator.js +22 -0
  248. package/lib/utils/temp-dir.d.ts +2 -0
  249. package/lib/utils/temp-dir.js +26 -0
  250. package/oclif.manifest.json +2137 -0
  251. package/openapi.yaml +713 -0
  252. package/package.json +203 -0
  253. package/scripts/enableAutoComplete.js +160 -0
  254. package/scripts/fetch-asyncapi-example.js +126 -0
  255. package/scripts/generateTypesForGenerateCommand.js +40 -0
  256. package/scripts/releasePackagesRename.js +88 -0
  257. package/scripts/updateUsageDocs.js +73 -0
package/package.json ADDED
@@ -0,0 +1,203 @@
1
+ {
2
+ "name": "@asyncapi-actions-test/trusted-publishing-test_asyncapi-cli",
3
+ "description": "All in one CLI for all AsyncAPI tools",
4
+ "version": "4.1.3",
5
+ "author": "@asyncapi-actions-test",
6
+ "bin": {
7
+ "asyncapi": "./bin/run_bin"
8
+ },
9
+ "repository": {
10
+ "url": "git+https://github.com/asyncapi-actions-test/cli.git",
11
+ "type": "git"
12
+ },
13
+ "bugs": "https://github.com/asyncapi/cli/issues",
14
+ "dependencies": {
15
+ "@asyncapi/avro-schema-parser": "^3.0.23",
16
+ "@asyncapi/bundler": "^0.6.4",
17
+ "@asyncapi/converter": "^1.6.2",
18
+ "@asyncapi/diff": "^0.5.0",
19
+ "@asyncapi/generator": "^3.0.1",
20
+ "@asyncapi/modelina-cli": "^5.3.5",
21
+ "@asyncapi/openapi-schema-parser": "^3.0.24",
22
+ "@asyncapi/optimizer": "^1.0.4",
23
+ "@asyncapi/parser": "^3.3.0",
24
+ "@asyncapi/problem": "^1.0.0",
25
+ "@asyncapi/protobuf-schema-parser": "^3.6.0",
26
+ "@asyncapi/raml-dt-schema-parser": "^4.0.24",
27
+ "@asyncapi/studio": "^1.1.0",
28
+ "@clack/prompts": "^0.7.0",
29
+ "@oclif/core": "^4.2.9",
30
+ "@oclif/plugin-autocomplete": "^3.2.26",
31
+ "@smoya/asyncapi-adoption-metrics": "^2.4.9",
32
+ "@stoplight/spectral-cli": "6.9.0",
33
+ "archiver": "^7.0.1",
34
+ "body-parser": "^2.2.0",
35
+ "chalk": "^4.1.0",
36
+ "chokidar": "^3.5.2",
37
+ "compression": "^1.8.0",
38
+ "config": "^4.0.0",
39
+ "cors": "^2.8.5",
40
+ "express": "^4.17.1",
41
+ "fast-levenshtein": "^3.0.0",
42
+ "fs-extra": "^11.1.0",
43
+ "helmet": "^8.1.0",
44
+ "https-proxy-agent": "^7.0.6",
45
+ "inquirer": "^8.2.0",
46
+ "js-yaml": "^4.1.0",
47
+ "oclif": "^4.17.34",
48
+ "open": "^8.4.0",
49
+ "picocolors": "^1.1.0",
50
+ "redoc-express": "^2.1.0",
51
+ "unzipper": "^0.10.11",
52
+ "uuid": "^11.1.0",
53
+ "winston": "^3.17.0",
54
+ "ws": "^8.2.3",
55
+ "yaml": "^2.6.1"
56
+ },
57
+ "devDependencies": {
58
+ "@asyncapi/minimaltemplate": "./test/fixtures/minimaltemplate",
59
+ "@asyncapi/newtemplate": "./test/fixtures/newtemplate",
60
+ "@commitlint/cli": "^19.8.1",
61
+ "@commitlint/config-conventional": "^19.8.1",
62
+ "@oclif/test": "^2",
63
+ "@types/archiver": "^6.0.3",
64
+ "@types/body-parser": "^1.19.6",
65
+ "@types/chai": "^4.3.6",
66
+ "@types/compression": "^1.8.1",
67
+ "@types/config": "^3.3.5",
68
+ "@types/cors": "^2.8.19",
69
+ "@types/express": "^5.0.3",
70
+ "@types/fast-levenshtein": "^0.0.2",
71
+ "@types/fs-extra": "^11.0.1",
72
+ "@types/inquirer": "^8.1.3",
73
+ "@types/js-yaml": "^4.0.5",
74
+ "@types/mocha": "^10.0.2",
75
+ "@types/node": "^22.13.10",
76
+ "@types/rimraf": "^3.0.2",
77
+ "@types/supertest": "^6.0.3",
78
+ "@types/uuid": "^10.0.0",
79
+ "@types/ws": "^8.2.0",
80
+ "@typescript-eslint/eslint-plugin": "^5.38.1",
81
+ "@typescript-eslint/parser": "^5.38.1",
82
+ "chai": "^4.3.6",
83
+ "cross-env": "^7.0.3",
84
+ "eslint": "^8.24.0",
85
+ "eslint-config-oclif": "^4",
86
+ "eslint-config-oclif-typescript": "^1.0.3",
87
+ "eslint-plugin-github": "^4.3.7",
88
+ "eslint-plugin-security": "^1.4.0",
89
+ "eslint-plugin-sonarjs": "^0.15.0",
90
+ "markdown-toc": "^1.2.0",
91
+ "mocha": "^10.2.0",
92
+ "nodemon": "^3.1.10",
93
+ "nyc": "^15.1.0",
94
+ "puppeteer": "^24.17.0",
95
+ "rimraf": "^3.0.2",
96
+ "simple-git": "^3.16.0",
97
+ "supertest": "^7.1.4",
98
+ "ts-node": "^10.9.1",
99
+ "tsc-alias": "^1.8.16",
100
+ "tsconfig-paths": "^4.2.0",
101
+ "typescript": "^5.8.2"
102
+ },
103
+ "engines": {
104
+ "node": ">=24.0"
105
+ },
106
+ "files": [
107
+ "/bin",
108
+ "/lib",
109
+ "/assets",
110
+ "/scripts",
111
+ "/npm-shrinkwrap.json",
112
+ "/openapi.yaml",
113
+ "/oclif.manifest.json"
114
+ ],
115
+ "homepage": "https://github.com/asyncapi/cli",
116
+ "keywords": [
117
+ "oclif"
118
+ ],
119
+ "license": "Apache-2.0",
120
+ "main": "lib/index.js",
121
+ "oclif": {
122
+ "commands": "./lib/apps/cli/commands",
123
+ "bin": "asyncapi",
124
+ "additionalVersionFlags": [
125
+ "--v"
126
+ ],
127
+ "hooks": {
128
+ "command_not_found": [
129
+ "./lib/apps/cli/internal/hooks/command_not_found/myhook"
130
+ ]
131
+ },
132
+ "macos": {
133
+ "identifier": "com.asyncapi.cli"
134
+ },
135
+ "topicSeparator": " ",
136
+ "topics": {
137
+ "config:context": {},
138
+ "config": {
139
+ "description": "CLI config settings"
140
+ },
141
+ "generate": {
142
+ "description": "Generate models and template"
143
+ }
144
+ },
145
+ "plugins": [
146
+ "@oclif/plugin-warn-if-update-available",
147
+ "@oclif/plugin-autocomplete"
148
+ ],
149
+ "warn-if-update-available": {
150
+ "frequency": 24,
151
+ "message": "\n<%= chalk.yellow('╭────────────────────────────────────────────────────────────────╮') %>\n<%= chalk.yellow('│ │') %>\n<%= chalk.yellow('│') %> Update available! <%= chalk.red(config.version) %> → <%= chalk.greenBright(latest) %>. <%= chalk.yellow('│') %>\n<%= chalk.yellow('│') %> <%= chalk.magentaBright('Changelog:') %> https://github.com/asyncapi/cli/releases/tag/v<%= latest %> <%= chalk.yellow('│') %>\n<%= chalk.yellow('│') %> Run \"<%= chalk.magentaBright('npm install -g @asyncapi/cli@latest') %>\" to update. <%= chalk.yellow('│') %>\n<%= chalk.yellow('│') %> <%= chalk.yellow('│') %>\n<%= chalk.yellow('╰────────────────────────────────────────────────────────────────╯') %>",
152
+ "frequencyUnit": "hours"
153
+ }
154
+ },
155
+ "publishConfig": {
156
+ "access": "public"
157
+ },
158
+ "optionalDependencies": {
159
+ "fsevents": "^2.3.2"
160
+ },
161
+ "scripts": {
162
+ "build": "rimraf lib && node scripts/fetch-asyncapi-example.js && npm run generate:languages && tsc && tsc-alias --project tsconfig.json && oclif manifest && echo \"Build Completed\"",
163
+ "bump:github-action": "cd github-action/lib/ && node bump-action-version.js",
164
+ "bump:version": "npx -p @changesets/cli@2.27.7 changeset version && npm run bump:github-action",
165
+ "dev": "tsc --watch",
166
+ "docker:build": "docker build -t asyncapi/cli:latest .",
167
+ "generate:readme:create": "node -e \"const fs = require('fs'); fs.writeFileSync('scripts/README.md', '# Usage\\n\\n<!-- usage -->\\n\\n# Commands\\n\\n<!-- commands -->\\n');\"",
168
+ "generate:readme:commands": "npm run build && cd scripts && cross-env DEBUG=* oclif readme",
169
+ "generate:assets": "npm run generate:readme:toc && npm run generate:commands",
170
+ "generate:commands": "npm run generate:readme:create && npm run generate:readme:commands && node ./scripts/updateUsageDocs.js && rimraf ./scripts/README.md",
171
+ "generate:readme:toc": "markdown-toc -i README.md",
172
+ "generate:languages": "node scripts/generateTypesForGenerateCommand.js",
173
+ "lint": "eslint --max-warnings 5 --config .eslintrc .",
174
+ "lint:fix": "eslint --max-warnings 5 --config .eslintrc . --fix",
175
+ "pack:macos": "oclif pack macos && npm run pack:rename",
176
+ "pack:linux": "oclif pack deb && npm run pack:rename",
177
+ "pack:tarballs": "oclif pack tarballs -t linux-x64 && npm run pack:rename",
178
+ "pack:tarballs:alpine": "oclif pack tarballs -t linux-x64 && npm run pack:rename alpine",
179
+ "pack:windows": "oclif pack win && npm run pack:rename",
180
+ "pack:rename": "node scripts/releasePackagesRename.js",
181
+ "prepublishOnly": "npm run build",
182
+ "pretest": "npm run build",
183
+ "pretest:coverage": "npm run build",
184
+ "posttest": "rimraf ./test.asyncapi-cli",
185
+ "postinstall": "node ./scripts/enableAutoComplete.js",
186
+ "test": "npm run cli:test && npm run action:test",
187
+ "cli:test": "cross-env NODE_ENV=development TEST=1 CUSTOM_CONTEXT_FILENAME=\"test.asyncapi-cli\" CUSTOM_CONTEXT_FILE_LOCATION=\"\" NODE_CONFIG_DIR=\"./src/apps/api/configs\" nyc --extension .ts mocha --require ts-node/register --require tsconfig-paths/register --require test/helpers/init.js --reporter spec --timeout 100000 \"test/**/*.test.ts\"",
188
+ "unit:test": "cross-env NODE_ENV=development TEST=1 CUSTOM_CONTEXT_FILENAME=\"test.asyncapi-cli\" CUSTOM_CONTEXT_FILE_LOCATION=\"\" NODE_CONFIG_DIR=\"./src/apps/api/configs\" nyc --extension .ts mocha --require ts-node/register --require tsconfig-paths/register --require test/helpers/init.js --reporter spec --timeout 100000 \"test/unit/**/*.test.ts\"",
189
+ "test:one": "cross-env NODE_ENV=development TEST=1 CUSTOM_CONTEXT_FILENAME=\"test.asyncapi-cli\" CUSTOM_CONTEXT_FILE_LOCATION=\"\" NODE_CONFIG_DIR=\"./src/apps/api/configs\" nyc --extension .ts mocha --require ts-node/register --require tsconfig-paths/register --require test/helpers/init.js --reporter spec --timeout 100000",
190
+ "get-version": "echo $npm_package_version",
191
+ "createhook": "oclif generate hook myhook --event=command_not_found",
192
+ "createhookinit": "oclif generate hook inithook --event=init",
193
+ "action:docker:build": "docker build -f github-action/Dockerfile -t asyncapi/github-action-for-cli:latest .",
194
+ "action:test": "npm run build && cd github-action && make test",
195
+ "api:dev": "cross-env NODE_ENV=development PORT=3000 nodemon",
196
+ "api:prod": "npm run api:build && cross-env NODE_ENV=production PORT=80 node lib/apps/api/server.js",
197
+ "api:docker": "docker run -it -p 80:80 asyncapi/server-api",
198
+ "api:build:docker": "docker build -t asyncapi/server-api -f ./src/apps/api/Dockerfile .",
199
+ "api:build": "rimraf lib && npm run generate:languages && tsc && tsc-alias --project tsconfig.json",
200
+ "api:test": ""
201
+ },
202
+ "types": "lib/index.d.ts"
203
+ }
@@ -0,0 +1,160 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+ const { spawnSync } = require('child_process');
3
+ const os = require('os');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+
7
+ const allowedShells = ['zsh', 'bash'];
8
+
9
+ // Helper function to find the first existing file among a list of paths
10
+ function findExistingFile(possibleFiles) {
11
+ for (const file of possibleFiles) {
12
+ const fullPath = path.join(os.homedir(), file);
13
+ if (fs.existsSync(fullPath)) {
14
+ return fullPath;
15
+ }
16
+ }
17
+ return null;
18
+ }
19
+
20
+ const shellConfigs = {
21
+ zsh: {
22
+ rcFile: path.join(os.homedir(), '.zshrc'),
23
+ detectFile: path.join(os.homedir(), '.zshrc'),
24
+ postMessage: 'Run: source ~/.zshrc',
25
+ action: (output, rcFile) => {
26
+ const configContent = fs.existsSync(rcFile) ? fs.readFileSync(rcFile, 'utf-8') : '';
27
+
28
+ if (configContent.includes(output.trim())) {
29
+ console.log(`✅ Autocomplete is already configured in ${rcFile}. Skipping addition.`);
30
+ } else {
31
+ fs.appendFileSync(rcFile, `\n# AsyncAPI CLI Autocomplete\n${output}\n`);
32
+ console.log(`✅ Autocomplete configuration added to ${rcFile}.`);
33
+ }
34
+ },
35
+ },
36
+ bash: {
37
+ rcFile: findExistingFile(['.bashrc', '.bash_profile', '.profile']) || path.join(os.homedir(), '.bashrc'),
38
+ detectFile: findExistingFile(['.bashrc', '.bash_profile', '.profile']),
39
+ postMessage: '', // This will be set dynamically later
40
+ action: (output, rcFile) => {
41
+ const configContent = fs.existsSync(rcFile) ? fs.readFileSync(rcFile, 'utf-8') : '';
42
+
43
+ if (configContent.includes(output.trim())) {
44
+ console.log(`✅ Autocomplete is already configured in ${rcFile}. Skipping addition.`);
45
+ } else {
46
+ fs.appendFileSync(rcFile, `\n# AsyncAPI CLI Autocomplete\n${output}\n`);
47
+ console.log(`✅ Autocomplete configuration added to ${rcFile}.`);
48
+ }
49
+ },
50
+ },
51
+ };
52
+
53
+ // Set correct postMessage dynamically
54
+ if (shellConfigs.bash.detectFile) {
55
+ shellConfigs.bash.postMessage = `Run: source ${shellConfigs.bash.detectFile}`;
56
+ } else {
57
+ shellConfigs.bash.postMessage = 'Run: source ~/.bashrc';
58
+ }
59
+
60
+ function getShellConfig(shell) {
61
+ if (!allowedShells.includes(shell)) {
62
+ throw new Error(`Unsupported shell: ${shell}. Autocomplete only supports zsh and bash.`);
63
+ }
64
+ return shellConfigs[shell];
65
+ }
66
+
67
+ function detectShell() {
68
+ const detectedShells = [];
69
+ for (const [shell, config] of Object.entries(shellConfigs)) {
70
+ if (config.detectFile && fs.existsSync(config.detectFile)) {
71
+ detectedShells.push(shell);
72
+ }
73
+ }
74
+ return detectedShells;
75
+ }
76
+
77
+ function checkPotentialPath(potentialPath) {
78
+ if (potentialPath.includes(path.sep)) {
79
+ if (fs.existsSync(potentialPath)) {
80
+ return potentialPath;
81
+ }
82
+ } else {
83
+ const result = spawnSync('/bin/sh', ['-c', `command -v ${potentialPath}`], {
84
+ encoding: 'utf-8',
85
+ stdio: 'pipe',
86
+ });
87
+ if (result.status === 0 && result.stdout) {
88
+ return result.stdout.trim().split('\n')[0];
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+
94
+ function findCliExecutable() {
95
+ const possiblePaths = [
96
+ path.resolve('./bin/run'),
97
+ path.resolve('../bin/run'),
98
+ path.resolve('./node_modules/.bin/asyncapi'),
99
+ 'asyncapi',
100
+ ];
101
+
102
+ for (const potentialPath of possiblePaths) {
103
+ try {
104
+ const foundPath = checkPotentialPath(potentialPath);
105
+ if (foundPath) {
106
+ console.log(`Found CLI executable at: ${foundPath}`);
107
+ return foundPath;
108
+ }
109
+ } catch (error) {
110
+ console.warn(`⚠️ Ignored error while checking path ${potentialPath}: ${error.message}`);
111
+ }
112
+ }
113
+
114
+ throw new Error('CLI executable not found. Ensure AsyncAPI CLI is installed.');
115
+ }
116
+
117
+ function generateAutocompleteScript(shell) {
118
+ const executablePath = findCliExecutable();
119
+ const result = spawnSync(executablePath, ['autocomplete', 'script', shell], {
120
+ encoding: 'utf-8',
121
+ stdio: 'pipe',
122
+ });
123
+ if (result.status !== 0 || result.error) {
124
+ throw new Error(
125
+ `Autocomplete setup for ${shell} failed: ${result.stderr || result.error?.message || 'Unknown error'}`
126
+ );
127
+ }
128
+ const output = result.stdout;
129
+ if (!output || output.trim() === '') {
130
+ throw new Error(`No autocomplete script generated for ${shell}.`);
131
+ }
132
+ return output;
133
+ }
134
+
135
+ function setupAutocomplete(shell) {
136
+ if (!allowedShells.includes(shell)) {
137
+ console.error(`❌ Autocomplete only supports zsh and bash. Skipping setup for ${shell}.`);
138
+ return;
139
+ }
140
+
141
+ try {
142
+ const config = getShellConfig(shell);
143
+ console.log(`🔧 Generating autocomplete script for ${shell}...`);
144
+ const output = generateAutocompleteScript(shell);
145
+ config.action(output, config.rcFile);
146
+ console.log(`✅ Autocomplete configured for ${shell}. ${config.postMessage}`);
147
+ } catch (error) {
148
+ console.error(`❌ Failed to setup autocomplete for ${shell}: ${error.message}`);
149
+ }
150
+ }
151
+
152
+ // Start
153
+ const shells = detectShell();
154
+ if (shells.length) {
155
+ for (const shell of shells) {
156
+ setupAutocomplete(shell);
157
+ }
158
+ } else {
159
+ console.log('⚠️ Shell not detected or unsupported. Autocomplete setup skipped.');
160
+ }
@@ -0,0 +1,126 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+
3
+ const fs = require('fs');
4
+ const unzipper = require('unzipper');
5
+ const path = require('path');
6
+
7
+ const { Parser } = require('@asyncapi/parser/cjs');
8
+ const { AvroSchemaParser } = require('@asyncapi/avro-schema-parser');
9
+ const { OpenAPISchemaParser } = require('@asyncapi/openapi-schema-parser');
10
+ const { RamlDTSchemaParser } = require('@asyncapi/raml-dt-schema-parser');
11
+ const { pipeline } = require('stream');
12
+ const { promisify } = require('util');
13
+
14
+ const streamPipeline = promisify(pipeline);
15
+
16
+ const parser = new Parser({
17
+ schemaParsers: [
18
+ AvroSchemaParser(),
19
+ OpenAPISchemaParser(),
20
+ RamlDTSchemaParser(),
21
+ ]
22
+ });
23
+
24
+ const SPEC_EXAMPLES_ZIP_URL = 'https://github.com/asyncapi/spec/archive/refs/heads/master.zip';
25
+ const EXAMPLE_DIRECTORY = path.join(__dirname, '../assets/examples');
26
+ const TEMP_ZIP_NAME = 'spec-examples.zip';
27
+
28
+ const fetchAsyncAPIExamplesFromExternalURL = () => {
29
+ try {
30
+ return new Promise((resolve, reject) => {
31
+ fetch(SPEC_EXAMPLES_ZIP_URL)
32
+ .then(async (res) => {
33
+ if (res.status !== 200) {
34
+ return reject(new Error(`Failed to fetch examples from ${SPEC_EXAMPLES_ZIP_URL}`));
35
+ }
36
+
37
+ const file = fs.createWriteStream(TEMP_ZIP_NAME);
38
+ await streamPipeline(res.body, file);
39
+
40
+ console.log('Fetched ZIP file');
41
+ resolve();
42
+ })
43
+ .catch(reject);
44
+ });
45
+ } catch (error) {
46
+ console.error(error);
47
+ }
48
+ };
49
+
50
+ const unzipAsyncAPIExamples = async () => {
51
+ return new Promise((resolve, reject) => {
52
+ if (!fs.existsSync(EXAMPLE_DIRECTORY)) {
53
+ fs.mkdirSync(EXAMPLE_DIRECTORY);
54
+ }
55
+
56
+ fs.createReadStream(TEMP_ZIP_NAME)
57
+ .pipe(unzipper.Parse())
58
+ .on('entry', async (entry) => {
59
+ const fileName = entry.path;
60
+ if (fileName.includes('examples/') && fileName.includes('.yml') && entry.type === 'File') {
61
+ const fileContent = await entry.buffer();
62
+ const fileNameWithExtension = fileName.split('examples/')[1];
63
+ fs.writeFileSync(path.join(EXAMPLE_DIRECTORY, fileNameWithExtension), fileContent.toString());
64
+ } else {
65
+ entry.autodrain();
66
+ }
67
+ }).on('close', () => {
68
+ console.log('Unzipped all examples from ZIP');
69
+ resolve();
70
+ }).on('error', (error) => {
71
+ reject(new Error(`Error in unzipping from ZIP: ${error.message}`));
72
+ });
73
+ });
74
+ };
75
+
76
+ const buildCLIListFromExamples = async () => {
77
+ const files = fs.readdirSync(EXAMPLE_DIRECTORY);
78
+ const examples = files.filter(file => file.includes('.yml')).sort();
79
+
80
+ const buildExampleList = examples.map(async example => {
81
+ const examplePath = path.join(EXAMPLE_DIRECTORY, example);
82
+ const exampleContent = fs.readFileSync(examplePath, { encoding: 'utf-8' });
83
+
84
+ try {
85
+ const { document } = await parser.parse(exampleContent);
86
+ // Failed for some reason to parse this spec file (document is undefined), ignore for now
87
+ if (!document) {
88
+ return;
89
+ }
90
+
91
+ const title = document.info().title();
92
+ const protocols = listAllProtocolsForFile(document);
93
+ return {
94
+ name: protocols ? `${title} - (protocols: ${protocols})` : title,
95
+ value: example
96
+ };
97
+ } catch (error) {
98
+ console.error(error);
99
+ }
100
+ });
101
+
102
+ const exampleList = (await Promise.all(buildExampleList)).filter(item => !!item);
103
+ const orderedExampleList = exampleList.sort((a, b) => a.name.localeCompare(b.name));
104
+
105
+ fs.writeFileSync(path.join(EXAMPLE_DIRECTORY, 'examples.json'), JSON.stringify(orderedExampleList, null, 4));
106
+ };
107
+
108
+ const listAllProtocolsForFile = (document) => {
109
+ const servers = document.servers();
110
+ if (servers.length === 0) {
111
+ return '';
112
+ }
113
+
114
+ return servers.all().map(server => server.protocol()).join(',');
115
+ };
116
+
117
+ const tidyUp = async () => {
118
+ fs.unlinkSync(TEMP_ZIP_NAME);
119
+ };
120
+
121
+ (async () => {
122
+ await fetchAsyncAPIExamplesFromExternalURL();
123
+ await unzipAsyncAPIExamples();
124
+ await buildCLIListFromExamples();
125
+ await tidyUp();
126
+ })();
@@ -0,0 +1,40 @@
1
+ const { writeFile } = require('fs/promises');
2
+ const path = require('path');
3
+ const { listBakedInTemplates } = require('@asyncapi/generator');
4
+
5
+ async function generateClientLanguages() {
6
+ const bakedInClients = listBakedInTemplates({ type: 'client' });
7
+
8
+ const targets = Array.from(new Set(bakedInClients.map(t => t.target))).sort();
9
+
10
+ const enumEntries = targets
11
+ .map(t => ` ${capitalize(t)} = '${t}',`)
12
+ .join('\n');
13
+
14
+ const fileContent = `// Auto-generated. Do not edit manually.
15
+ export enum AvailableLanguage {
16
+ ${enumEntries}
17
+ }
18
+
19
+ export const availableLanguages = [${targets.map(t => `'${t}'`).join(', ')}] as const;
20
+ export type AvailableLanguageType = typeof availableLanguages[number];
21
+
22
+ /**
23
+ * Returns the first available language as the default option.
24
+ */
25
+ export const getDefaultLanguage = (): AvailableLanguageType => availableLanguages[0];
26
+ `;
27
+
28
+ const outputPath = path.join(__dirname, '../src/domains/models/generate/ClientLanguages.ts');
29
+ await writeFile(outputPath, fileContent);
30
+
31
+ console.log('✅ ClientLanguages.ts generated');
32
+ }
33
+
34
+ function capitalize(str) {
35
+ return str.charAt(0).toUpperCase() + str.slice(1);
36
+ }
37
+
38
+ generateClientLanguages().catch(err => {
39
+ throw new Error(`Failed to generate ClientLanguages.ts: ${err.message}`);
40
+ });
@@ -0,0 +1,88 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+
3
+ const { rename, access, mkdir } = require('fs').promises;
4
+ const packageJson = require('../package.json');
5
+ const path = require('path');
6
+ const simpleGit = require('simple-git');
7
+ const git = simpleGit({baseDir: process.cwd()});
8
+
9
+ async function fileExists(checkPath) {
10
+ try {
11
+ await access(checkPath);
12
+ return true;
13
+ } catch (e) {
14
+ return false;
15
+ }
16
+ }
17
+
18
+ async function checkAndRenameFile(generatedPath, newPath) {
19
+ if (await fileExists(generatedPath)) {
20
+ await rename(generatedPath, newPath);
21
+ }
22
+ }
23
+
24
+ async function createDirectory(directoryPath) {
25
+ const exists = await fileExists(directoryPath);
26
+ if (!exists) {
27
+ await mkdir(directoryPath);
28
+ }
29
+ }
30
+
31
+ async function renameDeb({version, name, sha}) {
32
+ const dist = 'dist/deb';
33
+
34
+ // deb package naming convention: https://github.com/oclif/oclif/blob/fb5da961f925fa0eba5c5b05c8cee0c9bd156c00/src/upload-util.ts#L51
35
+ const generatedPath = path.resolve(dist, `${name}_${version}.${sha}-1_amd64.deb`);
36
+ const newPath = path.resolve(dist, 'asyncapi.deb');
37
+ await checkAndRenameFile(generatedPath, newPath);
38
+ }
39
+
40
+ async function renameTar({version, name, sha, isAlpine}) {
41
+ const dist = 'dist';
42
+
43
+ const generatedPath = path.resolve(dist, `${name}-v${version}-${sha}-linux-x64.tar.gz`);
44
+ // for tarballs, the files are generated in `dist/` directory.
45
+ // Creates a new `tar` directory(`dist/tar`), and moves the generated tarball inside that directory.
46
+ const tarDirectory = path.resolve(dist, 'tar');
47
+ await createDirectory(tarDirectory);
48
+
49
+ const fileName = isAlpine ? 'asyncapi-alpine.tar.gz' : 'asyncapi.tar.gz';
50
+ const newPath = path.resolve(tarDirectory, fileName);
51
+ await checkAndRenameFile(generatedPath, newPath);
52
+ }
53
+
54
+ async function renameWindows({version, name, sha, arch}) {
55
+ const dist = 'dist/win32';
56
+
57
+ const generatedPath = path.resolve(dist, `${name}-v${version}-${sha}-${arch}.exe`);
58
+ const newPath = path.resolve(dist, `asyncapi.${arch}.exe`);
59
+ await checkAndRenameFile(generatedPath, newPath);
60
+ }
61
+
62
+ async function renamePkg({version, name, sha, arch}) {
63
+ const dist = 'dist/macos';
64
+
65
+ const generatedPath = path.resolve(dist, `${name}-v${version}-${sha}-${arch}.pkg`);
66
+ const newPath = path.resolve(dist, `asyncapi.${arch}.pkg`);
67
+ await checkAndRenameFile(generatedPath, newPath);
68
+ }
69
+
70
+ async function renamePackages() {
71
+ const version = packageJson.version;
72
+ const name = 'asyncapi';
73
+ const sha = await git.revparse(['--short', 'HEAD']);
74
+ const isAlpine = process.argv.includes('alpine');
75
+
76
+ if (isAlpine) {
77
+ await renameTar({version, name, sha, isAlpine: true});
78
+ } else {
79
+ await renameDeb({version: version.split('-')[0], name, sha});
80
+ await renamePkg({version, name, sha, arch: 'x64'});
81
+ await renamePkg({version, name, sha, arch: 'arm64'});
82
+ await renameWindows({version, name, sha, arch: 'x64'});
83
+ await renameWindows({version, name, sha, arch: 'x86'});
84
+ await renameTar({version, name, sha, isAlpine: false});
85
+ }
86
+ }
87
+
88
+ renamePackages();