@goast/core 0.6.0 → 0.7.0-beta.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 (342) hide show
  1. package/README.md +0 -4
  2. package/dist/mod.d.ts +31 -0
  3. package/{script → dist}/src/ast/node.d.ts +3 -4
  4. package/{esm → dist}/src/ast/node.js +3 -9
  5. package/{esm → dist}/src/codegen/config.d.ts +2 -3
  6. package/{script → dist}/src/codegen/endpoints-generator.d.ts +4 -5
  7. package/{esm → dist}/src/codegen/endpoints-generator.js +1 -1
  8. package/{script → dist}/src/codegen/generator.d.ts +7 -8
  9. package/{esm → dist}/src/codegen/generator.js +4 -21
  10. package/{esm → dist}/src/codegen/internal-utils.d.ts +0 -1
  11. package/{esm → dist}/src/codegen/internal-utils.js +0 -1
  12. package/{script → dist}/src/codegen/schemas-generator.d.ts +4 -5
  13. package/{esm → dist}/src/codegen/schemas-generator.js +1 -2
  14. package/{esm → dist}/src/codegen/services-generator.d.ts +4 -5
  15. package/{esm → dist}/src/codegen/services-generator.js +1 -1
  16. package/{script → dist}/src/codegen/types.d.ts +3 -4
  17. package/dist/src/collect/collector.d.ts +4 -0
  18. package/{esm → dist}/src/collect/collector.js +6 -8
  19. package/{esm → dist}/src/collect/helpers.d.ts +2 -3
  20. package/{script → dist}/src/collect/types.d.ts +2 -3
  21. package/{esm → dist}/src/internal-utils.d.ts +0 -1
  22. package/dist/src/parse/deref-proxy.d.ts +3 -0
  23. package/{esm → dist}/src/parse/deref-proxy.js +7 -21
  24. package/{esm → dist}/src/parse/openapi-types.d.ts +0 -1
  25. package/{esm → dist}/src/parse/parser.d.ts +3 -4
  26. package/{esm → dist}/src/parse/parser.js +7 -20
  27. package/{script → dist}/src/parse/types.d.ts +3 -4
  28. package/{script → dist}/src/transform/api-types.d.ts +3 -4
  29. package/{esm → dist}/src/transform/helpers.d.ts +4 -5
  30. package/{esm → dist}/src/transform/helpers.js +5 -15
  31. package/dist/src/transform/transform-document.d.ts +4 -0
  32. package/{esm → dist}/src/transform/transform-document.js +2 -4
  33. package/{esm → dist}/src/transform/transform-endpoint.d.ts +3 -4
  34. package/{esm → dist}/src/transform/transform-endpoint.js +10 -17
  35. package/dist/src/transform/transform-schema.d.ts +5 -0
  36. package/{esm → dist}/src/transform/transform-schema.js +8 -12
  37. package/dist/src/transform/transformer.d.ts +4 -0
  38. package/{esm → dist}/src/transform/types.d.ts +4 -5
  39. package/{script → dist}/src/utils/action-provider.d.ts +2 -3
  40. package/{esm → dist}/src/utils/action-provider.js +3 -7
  41. package/{esm → dist}/src/utils/api-data.utils.d.ts +1 -2
  42. package/{esm → dist}/src/utils/array.utils.d.ts +0 -1
  43. package/{script → dist}/src/utils/asset-manager.d.ts +0 -1
  44. package/{esm → dist}/src/utils/asset-manager.js +2 -8
  45. package/{esm → dist}/src/utils/class.utils.d.ts +0 -1
  46. package/{esm → dist}/src/utils/class.utils.js +0 -1
  47. package/{script → dist}/src/utils/common.utils.d.ts +1 -2
  48. package/{esm → dist}/src/utils/condition.d.ts +0 -1
  49. package/dist/src/utils/endpoint.utils.d.ts +2 -0
  50. package/{esm → dist}/src/utils/error.utils.d.ts +0 -1
  51. package/{esm → dist}/src/utils/factory.d.ts +2 -3
  52. package/{esm → dist}/src/utils/factory.js +3 -7
  53. package/{esm → dist}/src/utils/file-system.utils.d.ts +2 -3
  54. package/{esm → dist}/src/utils/generator.utils.d.ts +0 -1
  55. package/{esm → dist}/src/utils/object.utils.d.ts +0 -1
  56. package/{esm → dist}/src/utils/object.utils.js +2 -11
  57. package/dist/src/utils/schema-factory.d.ts +41 -0
  58. package/dist/src/utils/schema-factory.js +132 -0
  59. package/{esm → dist}/src/utils/schema.utils.d.ts +2 -3
  60. package/{esm → dist}/src/utils/schema.utils.js +1 -5
  61. package/{esm → dist}/src/utils/source-builder.d.ts +5 -6
  62. package/{esm → dist}/src/utils/source-builder.js +19 -54
  63. package/{script → dist}/src/utils/string-builder/options.d.ts +0 -1
  64. package/{script → dist}/src/utils/string-builder/string-builder.d.ts +2 -3
  65. package/{esm → dist}/src/utils/string-builder/string-builder.js +2 -12
  66. package/{esm → dist}/src/utils/string-builder/utils.d.ts +2 -3
  67. package/{esm → dist}/src/utils/string-builder/utils.js +4 -6
  68. package/{script → dist}/src/utils/string.utils.d.ts +2 -3
  69. package/{esm → dist}/src/utils/string.utils.js +9 -15
  70. package/{esm → dist}/src/utils/string.utils.types.d.ts +0 -1
  71. package/{esm → dist}/src/utils/type.utils.d.ts +0 -1
  72. package/{script → dist}/src/utils/yaml-info.d.ts +0 -1
  73. package/{esm → dist}/src/utils/yaml-info.js +9 -6
  74. package/package.json +23 -16
  75. package/esm/_dnt.shims.d.ts +0 -11
  76. package/esm/_dnt.shims.d.ts.map +0 -1
  77. package/esm/_dnt.shims.js +0 -66
  78. package/esm/mod.d.ts +0 -32
  79. package/esm/mod.d.ts.map +0 -1
  80. package/esm/package.json +0 -3
  81. package/esm/src/ast/node.d.ts +0 -17
  82. package/esm/src/ast/node.d.ts.map +0 -1
  83. package/esm/src/codegen/config.d.ts.map +0 -1
  84. package/esm/src/codegen/endpoints-generator.d.ts +0 -18
  85. package/esm/src/codegen/endpoints-generator.d.ts.map +0 -1
  86. package/esm/src/codegen/generator.d.ts +0 -39
  87. package/esm/src/codegen/generator.d.ts.map +0 -1
  88. package/esm/src/codegen/internal-utils.d.ts.map +0 -1
  89. package/esm/src/codegen/schemas-generator.d.ts +0 -19
  90. package/esm/src/codegen/schemas-generator.d.ts.map +0 -1
  91. package/esm/src/codegen/services-generator.d.ts.map +0 -1
  92. package/esm/src/codegen/types.d.ts +0 -19
  93. package/esm/src/codegen/types.d.ts.map +0 -1
  94. package/esm/src/collect/collector.d.ts +0 -5
  95. package/esm/src/collect/collector.d.ts.map +0 -1
  96. package/esm/src/collect/helpers.d.ts.map +0 -1
  97. package/esm/src/collect/types.d.ts +0 -14
  98. package/esm/src/collect/types.d.ts.map +0 -1
  99. package/esm/src/internal-utils.d.ts.map +0 -1
  100. package/esm/src/parse/deref-proxy.d.ts +0 -4
  101. package/esm/src/parse/deref-proxy.d.ts.map +0 -1
  102. package/esm/src/parse/openapi-types.d.ts.map +0 -1
  103. package/esm/src/parse/parser.d.ts.map +0 -1
  104. package/esm/src/parse/types.d.ts +0 -28
  105. package/esm/src/parse/types.d.ts.map +0 -1
  106. package/esm/src/transform/api-types.d.ts +0 -211
  107. package/esm/src/transform/api-types.d.ts.map +0 -1
  108. package/esm/src/transform/helpers.d.ts.map +0 -1
  109. package/esm/src/transform/transform-document.d.ts +0 -5
  110. package/esm/src/transform/transform-document.d.ts.map +0 -1
  111. package/esm/src/transform/transform-endpoint.d.ts.map +0 -1
  112. package/esm/src/transform/transform-schema.d.ts +0 -6
  113. package/esm/src/transform/transform-schema.d.ts.map +0 -1
  114. package/esm/src/transform/transformer.d.ts +0 -5
  115. package/esm/src/transform/transformer.d.ts.map +0 -1
  116. package/esm/src/transform/types.d.ts.map +0 -1
  117. package/esm/src/utils/action-provider.d.ts +0 -29
  118. package/esm/src/utils/action-provider.d.ts.map +0 -1
  119. package/esm/src/utils/api-data.utils.d.ts.map +0 -1
  120. package/esm/src/utils/array.utils.d.ts.map +0 -1
  121. package/esm/src/utils/asset-manager.d.ts +0 -9
  122. package/esm/src/utils/asset-manager.d.ts.map +0 -1
  123. package/esm/src/utils/class.utils.d.ts.map +0 -1
  124. package/esm/src/utils/common.utils.d.ts +0 -16
  125. package/esm/src/utils/common.utils.d.ts.map +0 -1
  126. package/esm/src/utils/condition.d.ts.map +0 -1
  127. package/esm/src/utils/endpoint.utils.d.ts +0 -3
  128. package/esm/src/utils/endpoint.utils.d.ts.map +0 -1
  129. package/esm/src/utils/error.utils.d.ts.map +0 -1
  130. package/esm/src/utils/factory.d.ts.map +0 -1
  131. package/esm/src/utils/file-system.utils.d.ts.map +0 -1
  132. package/esm/src/utils/generator.utils.d.ts.map +0 -1
  133. package/esm/src/utils/object.utils.d.ts.map +0 -1
  134. package/esm/src/utils/schema.utils.d.ts.map +0 -1
  135. package/esm/src/utils/source-builder.d.ts.map +0 -1
  136. package/esm/src/utils/string-builder/options.d.ts +0 -15
  137. package/esm/src/utils/string-builder/options.d.ts.map +0 -1
  138. package/esm/src/utils/string-builder/string-builder.d.ts +0 -73
  139. package/esm/src/utils/string-builder/string-builder.d.ts.map +0 -1
  140. package/esm/src/utils/string-builder/utils.d.ts.map +0 -1
  141. package/esm/src/utils/string.utils.d.ts +0 -149
  142. package/esm/src/utils/string.utils.d.ts.map +0 -1
  143. package/esm/src/utils/string.utils.types.d.ts.map +0 -1
  144. package/esm/src/utils/type.utils.d.ts.map +0 -1
  145. package/esm/src/utils/yaml-info.d.ts +0 -13
  146. package/esm/src/utils/yaml-info.d.ts.map +0 -1
  147. package/script/_dnt.shims.d.ts +0 -11
  148. package/script/_dnt.shims.d.ts.map +0 -1
  149. package/script/_dnt.shims.js +0 -75
  150. package/script/mod.d.ts +0 -32
  151. package/script/mod.d.ts.map +0 -1
  152. package/script/mod.js +0 -36
  153. package/script/package.json +0 -3
  154. package/script/src/ast/node.d.ts.map +0 -1
  155. package/script/src/ast/node.js +0 -33
  156. package/script/src/codegen/config.d.ts +0 -36
  157. package/script/src/codegen/config.d.ts.map +0 -1
  158. package/script/src/codegen/config.js +0 -12
  159. package/script/src/codegen/endpoints-generator.d.ts.map +0 -1
  160. package/script/src/codegen/endpoints-generator.js +0 -35
  161. package/script/src/codegen/generator.d.ts.map +0 -1
  162. package/script/src/codegen/generator.js +0 -134
  163. package/script/src/codegen/internal-utils.d.ts +0 -2
  164. package/script/src/codegen/internal-utils.d.ts.map +0 -1
  165. package/script/src/codegen/internal-utils.js +0 -9
  166. package/script/src/codegen/schemas-generator.d.ts.map +0 -1
  167. package/script/src/codegen/schemas-generator.js +0 -49
  168. package/script/src/codegen/services-generator.d.ts +0 -18
  169. package/script/src/codegen/services-generator.d.ts.map +0 -1
  170. package/script/src/codegen/services-generator.js +0 -35
  171. package/script/src/codegen/types.d.ts.map +0 -1
  172. package/script/src/codegen/types.js +0 -2
  173. package/script/src/collect/collector.d.ts +0 -5
  174. package/script/src/collect/collector.d.ts.map +0 -1
  175. package/script/src/collect/collector.js +0 -122
  176. package/script/src/collect/helpers.d.ts +0 -5
  177. package/script/src/collect/helpers.d.ts.map +0 -1
  178. package/script/src/collect/helpers.js +0 -37
  179. package/script/src/collect/types.d.ts.map +0 -1
  180. package/script/src/collect/types.js +0 -2
  181. package/script/src/internal-utils.d.ts +0 -2
  182. package/script/src/internal-utils.d.ts.map +0 -1
  183. package/script/src/internal-utils.js +0 -6
  184. package/script/src/parse/deref-proxy.d.ts +0 -4
  185. package/script/src/parse/deref-proxy.d.ts.map +0 -1
  186. package/script/src/parse/deref-proxy.js +0 -71
  187. package/script/src/parse/openapi-types.d.ts +0 -902
  188. package/script/src/parse/openapi-types.d.ts.map +0 -1
  189. package/script/src/parse/openapi-types.js +0 -2
  190. package/script/src/parse/parser.d.ts +0 -18
  191. package/script/src/parse/parser.d.ts.map +0 -1
  192. package/script/src/parse/parser.js +0 -183
  193. package/script/src/parse/types.d.ts.map +0 -1
  194. package/script/src/parse/types.js +0 -5
  195. package/script/src/transform/api-types.d.ts.map +0 -1
  196. package/script/src/transform/api-types.js +0 -2
  197. package/script/src/transform/helpers.d.ts +0 -58
  198. package/script/src/transform/helpers.d.ts.map +0 -1
  199. package/script/src/transform/helpers.js +0 -211
  200. package/script/src/transform/transform-document.d.ts +0 -5
  201. package/script/src/transform/transform-document.d.ts.map +0 -1
  202. package/script/src/transform/transform-document.js +0 -34
  203. package/script/src/transform/transform-endpoint.d.ts +0 -5
  204. package/script/src/transform/transform-endpoint.d.ts.map +0 -1
  205. package/script/src/transform/transform-endpoint.js +0 -273
  206. package/script/src/transform/transform-schema.d.ts +0 -6
  207. package/script/src/transform/transform-schema.d.ts.map +0 -1
  208. package/script/src/transform/transform-schema.js +0 -196
  209. package/script/src/transform/transformer.d.ts +0 -5
  210. package/script/src/transform/transformer.d.ts.map +0 -1
  211. package/script/src/transform/transformer.js +0 -45
  212. package/script/src/transform/types.d.ts +0 -36
  213. package/script/src/transform/types.d.ts.map +0 -1
  214. package/script/src/transform/types.js +0 -6
  215. package/script/src/utils/action-provider.d.ts.map +0 -1
  216. package/script/src/utils/action-provider.js +0 -33
  217. package/script/src/utils/api-data.utils.d.ts +0 -3
  218. package/script/src/utils/api-data.utils.d.ts.map +0 -1
  219. package/script/src/utils/api-data.utils.js +0 -42
  220. package/script/src/utils/array.utils.d.ts +0 -2
  221. package/script/src/utils/array.utils.d.ts.map +0 -1
  222. package/script/src/utils/array.utils.js +0 -10
  223. package/script/src/utils/asset-manager.d.ts.map +0 -1
  224. package/script/src/utils/asset-manager.js +0 -55
  225. package/script/src/utils/class.utils.d.ts +0 -8
  226. package/script/src/utils/class.utils.d.ts.map +0 -1
  227. package/script/src/utils/class.utils.js +0 -33
  228. package/script/src/utils/common.utils.d.ts.map +0 -1
  229. package/script/src/utils/common.utils.js +0 -84
  230. package/script/src/utils/condition.d.ts +0 -4
  231. package/script/src/utils/condition.d.ts.map +0 -1
  232. package/script/src/utils/condition.js +0 -7
  233. package/script/src/utils/endpoint.utils.d.ts +0 -3
  234. package/script/src/utils/endpoint.utils.d.ts.map +0 -1
  235. package/script/src/utils/endpoint.utils.js +0 -11
  236. package/script/src/utils/error.utils.d.ts +0 -2
  237. package/script/src/utils/error.utils.d.ts.map +0 -1
  238. package/script/src/utils/error.utils.js +0 -6
  239. package/script/src/utils/factory.d.ts +0 -21
  240. package/script/src/utils/factory.d.ts.map +0 -1
  241. package/script/src/utils/factory.js +0 -33
  242. package/script/src/utils/file-system.utils.d.ts +0 -11
  243. package/script/src/utils/file-system.utils.d.ts.map +0 -1
  244. package/script/src/utils/file-system.utils.js +0 -79
  245. package/script/src/utils/generator.utils.d.ts +0 -2
  246. package/script/src/utils/generator.utils.d.ts.map +0 -1
  247. package/script/src/utils/generator.utils.js +0 -9
  248. package/script/src/utils/object.utils.d.ts +0 -3
  249. package/script/src/utils/object.utils.d.ts.map +0 -1
  250. package/script/src/utils/object.utils.js +0 -40
  251. package/script/src/utils/schema.utils.d.ts +0 -12
  252. package/script/src/utils/schema.utils.d.ts.map +0 -1
  253. package/script/src/utils/schema.utils.js +0 -206
  254. package/script/src/utils/source-builder.d.ts +0 -236
  255. package/script/src/utils/source-builder.d.ts.map +0 -1
  256. package/script/src/utils/source-builder.js +0 -458
  257. package/script/src/utils/string-builder/options.d.ts.map +0 -1
  258. package/script/src/utils/string-builder/options.js +0 -10
  259. package/script/src/utils/string-builder/string-builder.d.ts.map +0 -1
  260. package/script/src/utils/string-builder/string-builder.js +0 -153
  261. package/script/src/utils/string-builder/utils.d.ts +0 -22
  262. package/script/src/utils/string-builder/utils.d.ts.map +0 -1
  263. package/script/src/utils/string-builder/utils.js +0 -37
  264. package/script/src/utils/string.utils.d.ts.map +0 -1
  265. package/script/src/utils/string.utils.js +0 -382
  266. package/script/src/utils/string.utils.types.d.ts +0 -150
  267. package/script/src/utils/string.utils.types.d.ts.map +0 -1
  268. package/script/src/utils/string.utils.types.js +0 -2
  269. package/script/src/utils/type.utils.d.ts +0 -57
  270. package/script/src/utils/type.utils.d.ts.map +0 -1
  271. package/script/src/utils/type.utils.js +0 -10
  272. package/script/src/utils/yaml-info.d.ts.map +0 -1
  273. package/script/src/utils/yaml-info.js +0 -38
  274. package/src/_dnt.shims.ts +0 -69
  275. package/src/mod.ts +0 -35
  276. package/src/src/ast/node.ts +0 -46
  277. package/src/src/codegen/config.ts +0 -50
  278. package/src/src/codegen/endpoints-generator.ts +0 -72
  279. package/src/src/codegen/generator.ts +0 -192
  280. package/src/src/codegen/internal-utils.ts +0 -6
  281. package/src/src/codegen/schemas-generator.ts +0 -87
  282. package/src/src/codegen/services-generator.ts +0 -77
  283. package/src/src/codegen/types.ts +0 -37
  284. package/src/src/collect/collector.ts +0 -142
  285. package/src/src/collect/helpers.ts +0 -36
  286. package/src/src/collect/types.ts +0 -21
  287. package/src/src/internal-utils.ts +0 -5
  288. package/src/src/parse/deref-proxy.ts +0 -70
  289. package/src/src/parse/openapi-types.ts +0 -953
  290. package/src/src/parse/parser.ts +0 -206
  291. package/src/src/parse/types.ts +0 -28
  292. package/src/src/transform/api-types.ts +0 -259
  293. package/src/src/transform/helpers.ts +0 -251
  294. package/src/src/transform/transform-document.ts +0 -35
  295. package/src/src/transform/transform-endpoint.ts +0 -332
  296. package/src/src/transform/transform-schema.ts +0 -232
  297. package/src/src/transform/transformer.ts +0 -53
  298. package/src/src/transform/types.ts +0 -52
  299. package/src/src/utils/action-provider.ts +0 -58
  300. package/src/src/utils/api-data.utils.ts +0 -48
  301. package/src/src/utils/array.utils.ts +0 -7
  302. package/src/src/utils/asset-manager.ts +0 -51
  303. package/src/src/utils/class.utils.ts +0 -40
  304. package/src/src/utils/common.utils.ts +0 -86
  305. package/src/src/utils/condition.ts +0 -7
  306. package/src/src/utils/endpoint.utils.ts +0 -10
  307. package/src/src/utils/error.utils.ts +0 -3
  308. package/src/src/utils/factory.ts +0 -42
  309. package/src/src/utils/file-system.utils.ts +0 -97
  310. package/src/src/utils/generator.utils.ts +0 -6
  311. package/src/src/utils/object.utils.ts +0 -32
  312. package/src/src/utils/schema.utils.ts +0 -240
  313. package/src/src/utils/source-builder.ts +0 -597
  314. package/src/src/utils/string-builder/options.ts +0 -19
  315. package/src/src/utils/string-builder/string-builder.ts +0 -165
  316. package/src/src/utils/string-builder/utils.ts +0 -69
  317. package/src/src/utils/string.utils.ts +0 -394
  318. package/src/src/utils/string.utils.types.ts +0 -179
  319. package/src/src/utils/type.utils.ts +0 -93
  320. package/src/src/utils/yaml-info.ts +0 -48
  321. /package/{esm → dist}/mod.js +0 -0
  322. /package/{esm → dist}/src/codegen/config.js +0 -0
  323. /package/{esm → dist}/src/codegen/types.js +0 -0
  324. /package/{esm → dist}/src/collect/helpers.js +0 -0
  325. /package/{esm → dist}/src/collect/types.js +0 -0
  326. /package/{esm → dist}/src/internal-utils.js +0 -0
  327. /package/{esm → dist}/src/parse/openapi-types.js +0 -0
  328. /package/{esm → dist}/src/parse/types.js +0 -0
  329. /package/{esm → dist}/src/transform/api-types.js +0 -0
  330. /package/{esm → dist}/src/transform/transformer.js +0 -0
  331. /package/{esm → dist}/src/transform/types.js +0 -0
  332. /package/{esm → dist}/src/utils/api-data.utils.js +0 -0
  333. /package/{esm → dist}/src/utils/array.utils.js +0 -0
  334. /package/{esm → dist}/src/utils/common.utils.js +0 -0
  335. /package/{esm → dist}/src/utils/condition.js +0 -0
  336. /package/{esm → dist}/src/utils/endpoint.utils.js +0 -0
  337. /package/{esm → dist}/src/utils/error.utils.js +0 -0
  338. /package/{esm → dist}/src/utils/file-system.utils.js +0 -0
  339. /package/{esm → dist}/src/utils/generator.utils.js +0 -0
  340. /package/{esm → dist}/src/utils/string-builder/options.js +0 -0
  341. /package/{esm → dist}/src/utils/string.utils.types.js +0 -0
  342. /package/{esm → dist}/src/utils/type.utils.js +0 -0
@@ -1,206 +0,0 @@
1
- import * as dntShim from "../../_dnt.shims.js";
2
- import path from 'node:path';
3
- import { cwd } from 'node:process';
4
-
5
-
6
- import fs from 'fs-extra';
7
-
8
- import { collectOpenApi } from '../collect/collector.js';
9
- import type { ApiData } from '../transform/api-types.js';
10
- import { transformOpenApi } from '../transform/transformer.js';
11
- import { isNullish } from '../utils/common.utils.js';
12
- import { getLineInfo, parseYamlWithInfo } from '../utils/yaml-info.js';
13
- import { createDerefProxy } from './deref-proxy.js';
14
- import type { OpenApiDocument, OpenApiObject, OpenApiReference, OpenApiSchema } from './openapi-types.js';
15
- import { defaultOpenApiParserOptions, type Deref, type OpenApiParserOptions } from './types.js';
16
-
17
- type LoadedDocument = {
18
- file: string;
19
- document: OpenApiDocument;
20
- dereferencedDocument: Deref<OpenApiDocument>;
21
- dereferencedComponents: Map<string, Deref<OpenApiObject<string>>>;
22
- };
23
-
24
- export class OpenApiParser {
25
- private readonly _loadedDocuments = new Map<string, LoadedDocument>();
26
- private readonly _config: OpenApiParserOptions;
27
-
28
- constructor(config?: Partial<OpenApiParserOptions>) {
29
- this._config = { ...defaultOpenApiParserOptions, ...config };
30
- }
31
-
32
- public async parseApisAndTransform(...fileNames: (string | string[])[]): Promise<ApiData> {
33
- const flatFileNames = ([] as string[]).concat(...fileNames);
34
- const apis = await Promise.all(flatFileNames.map((fileName) => this.parseApi(fileName)));
35
-
36
- const transformed = this.transformApis(apis);
37
-
38
- return transformed;
39
- }
40
-
41
- public async parseApi(fileName: string): Promise<Deref<OpenApiDocument>> {
42
- const absoluteFilePath = this.isUrl(fileName) ? fileName : path.resolve(cwd(), fileName);
43
- const doc = await this.loadDocument(absoluteFilePath);
44
- return await this.dereference(absoluteFilePath, [], doc.document);
45
- }
46
-
47
- public transformApis(apis: Deref<OpenApiDocument>[]): ApiData {
48
- const collectedData = collectOpenApi(apis);
49
- const transformedData = transformOpenApi(collectedData, this._config);
50
- return transformedData;
51
- }
52
-
53
- private async dereference<T extends OpenApiObject<string>>(
54
- file: string,
55
- path: unknown[],
56
- value: T,
57
- ): Promise<Deref<T>> {
58
- const openApiPath = `/${path.join('/')}`;
59
- let existingDocument = this._loadedDocuments.get(file);
60
- if (existingDocument) {
61
- const existingComponent = existingDocument.dereferencedComponents.get(openApiPath);
62
- if (existingComponent) {
63
- return existingComponent as Deref<T>;
64
- }
65
- } else {
66
- existingDocument = await this.loadDocument(file);
67
- }
68
-
69
- const result = createDerefProxy(value, {
70
- file,
71
- pos: getLineInfo(existingDocument.document, path),
72
- path: openApiPath,
73
- document: existingDocument.dereferencedDocument,
74
- originalComponent: value,
75
- });
76
- existingDocument.dereferencedComponents.set(openApiPath, result as Deref<OpenApiObject<string>>);
77
-
78
- if (value.$ref) {
79
- // deno-lint-ignore no-explicit-any
80
- result.$ref = await this.resolveReference<T>(file, value as OpenApiReference) as any;
81
- }
82
- for (const key of Object.keys(value) as (keyof T)[]) {
83
- if (key === '$ref') continue;
84
- const v = value[key];
85
- if (isNullish(v)) continue;
86
- if (typeof v === 'object') {
87
- if (Array.isArray(v)) {
88
- (result as Record<keyof T, unknown>)[key] = await Promise.all(
89
- v.map(async (v, index) => {
90
- if (v && typeof v === 'object') {
91
- return await this.dereference(file, [...path, key, index], v);
92
- } else {
93
- return v;
94
- }
95
- }),
96
- );
97
- } else {
98
- (result as Record<keyof T, unknown>)[key] = await this.dereference(
99
- file,
100
- [...path, key],
101
- v as Record<string, unknown>,
102
- );
103
- }
104
- }
105
- if (typeof v === 'string' && openApiPath.endsWith('/discriminator/mapping')) {
106
- (result as Record<keyof T, unknown>)[key] = await this.resolveReference<OpenApiSchema>(file, { $ref: v });
107
- }
108
- }
109
-
110
- return result;
111
- }
112
-
113
- private async resolveReference<T extends OpenApiObject<string>>(
114
- file: string,
115
- ref: OpenApiReference,
116
- ): Promise<Deref<T> | undefined> {
117
- const [refFile, refPath] = ref.$ref.split('#');
118
-
119
- let absoluteRefFile: string = refFile;
120
- if (!/\S/.test(refFile)) {
121
- absoluteRefFile = file;
122
- } else if (!this.isUrl(refFile)) {
123
- absoluteRefFile = path.resolve(path.dirname(file), refFile);
124
- }
125
-
126
- const doc = await this.loadDocument(absoluteRefFile);
127
-
128
- const value = refPath ? getDeepProperty(doc.document, refPath.replace(/[/]/g, '.')) : doc.document;
129
- if (value && typeof value === 'object') {
130
- return this.dereference(absoluteRefFile, refPath?.split('/').filter(Boolean) ?? [], value as T);
131
- }
132
-
133
- return undefined;
134
- }
135
-
136
- private async loadDocument(fileOrUrl: string): Promise<LoadedDocument> {
137
- const existingDocument = this._loadedDocuments.get(fileOrUrl);
138
- if (existingDocument) {
139
- return existingDocument;
140
- }
141
-
142
- const documentContent = await this.getDocumentContent(fileOrUrl);
143
- const parsedDocument = this.tryParseYamlOrJson(documentContent);
144
- if (parsedDocument === undefined) {
145
- throw new Error(`Unable to parse ${fileOrUrl}`);
146
- }
147
-
148
- const doc = (parsedDocument ?? {}) as OpenApiDocument;
149
- const deref = createDerefProxy(doc, {
150
- file: fileOrUrl,
151
- pos: { line: 0, col: 0 },
152
- path: '',
153
- originalComponent: doc,
154
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
155
- document: undefined!,
156
- });
157
- deref.$src.document = deref;
158
- const loadedDocument = {
159
- file: fileOrUrl,
160
- document: doc,
161
- dereferencedDocument: deref,
162
- dereferencedComponents: new Map(),
163
- };
164
- this._loadedDocuments.set(fileOrUrl, loadedDocument);
165
- return loadedDocument;
166
- }
167
-
168
- private async getDocumentContent(fileOrUrl: string): Promise<string> {
169
- if (this.isUrl(fileOrUrl)) {
170
- const res = await dntShim.fetch(fileOrUrl);
171
- if (!res.ok) {
172
- throw new Error(`Unable to download ${fileOrUrl}: ${res.statusText}`);
173
- }
174
- return await res.text();
175
- } else {
176
- return (await fs.readFile(fileOrUrl)).toString();
177
- }
178
- }
179
-
180
- private isUrl(fileOrUrl: string): boolean {
181
- return /^https?:\/\//i.test(fileOrUrl);
182
- }
183
-
184
- private tryParseYamlOrJson(yamlOrJson: string): unknown {
185
- try {
186
- return parseYamlWithInfo(yamlOrJson);
187
- } catch {
188
- return undefined;
189
- }
190
- }
191
- }
192
-
193
- function getDeepProperty(value: Record<string, unknown>, path: string): unknown {
194
- const parts = path.split('.');
195
- let result: unknown = value;
196
- for (const part of parts) {
197
- if (!/\S/.test(part)) continue;
198
- if (typeof result === 'object') {
199
- result = (result as Record<string, unknown>)[part];
200
- } else {
201
- return undefined;
202
- }
203
- }
204
-
205
- return result;
206
- }
@@ -1,28 +0,0 @@
1
- import { defaultOpenApiTransformerOptions, type OpenApiTransformerOptions } from '../transform/types.js';
2
- import type { OpenApiDiscriminator, OpenApiDocument, OpenApiReference, OpenApiSchema } from './openapi-types.js';
3
-
4
- export type DerefSource<T> = {
5
- file: string;
6
- pos: { line: number; col: number };
7
- path: string;
8
- document: Deref<OpenApiDocument>;
9
- originalComponent: T;
10
- };
11
-
12
- type _DerefDiscriminator = Omit<OpenApiDiscriminator, 'mapping'> & {
13
- mapping?: Record<string, Deref<OpenApiSchema>>;
14
- };
15
- type _Deref<T extends object> = T extends OpenApiDiscriminator ? _DerefDiscriminator
16
- :
17
- & {
18
- [K in keyof T as K extends keyof OpenApiReference ? never : K]: Deref<T[K]>;
19
- }
20
- & {
21
- $src: DerefSource<T>;
22
- $ref?: Deref<T>;
23
- };
24
- export type Deref<T> = T extends object ? (T extends (infer A)[] ? Deref<A>[] : _Deref<T>) : T;
25
-
26
- export type OpenApiParserOptions = OpenApiTransformerOptions;
27
-
28
- export const defaultOpenApiParserOptions = { ...defaultOpenApiTransformerOptions };
@@ -1,259 +0,0 @@
1
- import type {
2
- KnownOpenApiParameterTarget,
3
- OpenApiDocument,
4
- OpenApiHeader,
5
- OpenApiHttpMethod,
6
- OpenApiMediaType,
7
- OpenApiOperation,
8
- OpenApiParameter,
9
- OpenApiPathItem,
10
- OpenApiRequestBody,
11
- OpenApiResponse,
12
- OpenApiSchema,
13
- OpenApiTag,
14
- } from '../parse/openapi-types.js';
15
- import type { Deref, DerefSource } from '../parse/types.js';
16
- import type { OptionalProperties } from '../utils/type.utils.js';
17
-
18
- export type ApiData = {
19
- documents: Deref<OpenApiDocument>[];
20
- services: ApiService[];
21
- endpoints: ApiEndpoint[];
22
- schemas: ApiSchema[];
23
- };
24
-
25
- export type ApiComponentSource<T> = DerefSource<T> & {
26
- component: Deref<T>;
27
- };
28
-
29
- export type Transformed<T> = T extends OpenApiTag ? ApiService
30
- : T extends OpenApiPathItem ? ApiPath
31
- : T extends OpenApiParameter ? ApiParameter
32
- : T extends OpenApiRequestBody ? ApiRequestBody
33
- : T extends OpenApiResponse ? ApiResponse
34
- : T extends OpenApiMediaType ? ApiContent
35
- : T extends OpenApiHeader ? ApiHeader
36
- : T extends OpenApiSchema ? ApiSchema
37
- : undefined;
38
-
39
- export type ApiComponent<T> = {
40
- id: string;
41
- $src: ApiComponentSource<T>;
42
- $ref: Transformed<T> | undefined;
43
- };
44
-
45
- export type ApiMethod = OpenApiHttpMethod;
46
- export type ApiParameterTarget = KnownOpenApiParameterTarget;
47
-
48
- export type ApiServiceComponent = OptionalProperties<ApiComponent<OpenApiTag>, '$src'>;
49
- export type ApiService = ApiServiceComponent & {
50
- name: string;
51
- description: string | undefined;
52
- endpoints: ApiEndpoint[];
53
- };
54
-
55
- export type ApiPathComponent = ApiComponent<OpenApiPathItem>;
56
- export type ApiPath = ApiPathComponent & {
57
- summary: string | undefined;
58
- description: string | undefined;
59
- path: string;
60
- parameters: ApiParameter[];
61
- } & { [K in ApiMethod]: ApiEndpoint | undefined };
62
-
63
- export type ApiEndpointComponent = ApiComponent<OpenApiOperation>;
64
- export type ApiEndpoint = ApiEndpointComponent & {
65
- name: string;
66
- path: string;
67
- pathInfo: ApiPath;
68
- method: ApiMethod;
69
- summary: string | undefined;
70
- description: string | undefined;
71
- parameters: ApiParameter[];
72
- deprecated: boolean;
73
- requestBody: ApiRequestBody | undefined;
74
- responses: ApiResponse[];
75
- tags: string[];
76
- custom: Record<string, unknown>;
77
- };
78
-
79
- export type ApiParameterComponent = ApiComponent<OpenApiParameter>;
80
- export type ApiParameter = ApiParameterComponent & {
81
- name: string;
82
- target: ApiParameterTarget;
83
- description: string | undefined;
84
- required: boolean;
85
- deprecated: boolean;
86
- allowEmptyValue: boolean | undefined;
87
- style: string | undefined;
88
- explode: boolean | undefined;
89
- allowReserved: boolean | undefined;
90
- schema: ApiSchema | undefined;
91
- };
92
-
93
- export type ApiRequestBodyComponent = ApiComponent<OpenApiRequestBody>;
94
- export type ApiRequestBody = ApiRequestBodyComponent & {
95
- description: string | undefined;
96
- content: ApiContent[];
97
- required: boolean;
98
- };
99
-
100
- export type ApiContentComponent = ApiComponent<OpenApiMediaType>;
101
- export type ApiContent = ApiContentComponent & {
102
- type: string;
103
- schema: ApiSchema | undefined;
104
- };
105
-
106
- export type ApiExampleComponent = ApiComponent<OpenApiResponse>;
107
- export type ApiResponse = ApiExampleComponent & {
108
- /**
109
- * The response key exactly as the spec wrote it: an exact code (`'200'`), a range (`'2XX'`), or
110
- * `'default'`.
111
- *
112
- * Kept alongside {@link statusCode} because that field is lossy by construction —
113
- * `Number(status) || undefined` collapses `default`, every range code and the literal `'0'` into
114
- * `undefined`. Anything that has to *emit* a status code needs this one.
115
- */
116
- statusKey: string;
117
- statusCode: number | undefined;
118
- description: string | undefined;
119
- headers: ApiHeader[];
120
- contentOptions: ApiContent[];
121
- };
122
-
123
- export type ApiHeaderComponent = Omit<ApiComponent<OpenApiHeader> | ApiComponent<OpenApiSchema>, '$ref'> & {
124
- $ref: ApiHeader | undefined;
125
- };
126
- export type ApiHeader = ApiHeaderComponent & Omit<ApiParameter, 'target'>;
127
-
128
- export type ApiSchemaType = 'string' | 'number' | 'integer' | 'array' | 'boolean' | 'null' | 'object' | string;
129
- export type ApiSchemaKind =
130
- | 'oneOf'
131
- | 'multi-type'
132
- | 'string'
133
- | 'number'
134
- | 'integer'
135
- | 'array'
136
- | 'boolean'
137
- | 'null'
138
- | 'object'
139
- | 'combined'
140
- | 'unknown';
141
- export type ApiSchemaAccessibility = 'all' | 'readOnly' | 'writeOnly' | 'none';
142
- export type ApiSchemaProperty = {
143
- name: string;
144
- schema: ApiSchema;
145
- };
146
- export type ApiSchemaDiscriminator = {
147
- propertyName: string;
148
- mapping: Record<string, ApiSchema>;
149
- };
150
- export type ApiSchemaComponent = ApiComponent<OpenApiSchema>;
151
- export type ApiSchemaBase = ApiSchemaComponent & {
152
- name: string;
153
- isNameGenerated: boolean;
154
- description: string | undefined;
155
- deprecated: boolean;
156
- accessibility: ApiSchemaAccessibility;
157
- enum: unknown[] | undefined;
158
- const: unknown | undefined;
159
- default: unknown | undefined;
160
- example: unknown | undefined;
161
- nullable: boolean;
162
- required: Set<string>;
163
- custom: Record<string, unknown>;
164
- not: ApiSchema | undefined;
165
- discriminator: ApiSchemaDiscriminator | undefined;
166
- inheritedSchemas: (ApiSchema & { discriminator: NonNullable<ApiSchema['discriminator']> })[];
167
- };
168
- export type ApiSchema<T extends ApiSchemaKind = ApiSchemaKind> = ApiSchemaBase & ApiSchemaExtensions<T>;
169
- type AdditionalCombinedSchemaProperties = {
170
- allOf: ApiSchema[];
171
- anyOf: ApiSchema[];
172
- };
173
- type AdditionalArraySchemaProperties = {
174
- /**
175
- * The schema of every element of the array, or `undefined` if the array does not constrain its elements to a
176
- * single schema. Note that an OpenAPI 3.1 tuple (`prefixItems`) has no single element schema: tuples are not
177
- * modelled, so `items` is `undefined` for them even though the OpenAPI schema has an `items` keyword.
178
- */
179
- items: ApiSchema | undefined;
180
- minItems: number | undefined;
181
- maxItems: number | undefined;
182
- };
183
- type AdditionalObjectSchemaProperties = {
184
- properties: Map<string, ApiSchemaProperty>;
185
- additionalProperties: boolean | undefined | ApiSchema;
186
- } & AdditionalCombinedSchemaProperties;
187
- type AdditionalNumberSchemaProperties = {
188
- minimum: number | undefined;
189
- maximum: number | undefined;
190
- };
191
- type AdditionalStringSchemaProperties = {
192
- pattern: string | undefined;
193
- minLength: number | undefined;
194
- maxLength: number | undefined;
195
- };
196
- type AdditionalPrimitiveSchemaProperties = {
197
- format: string | undefined;
198
- };
199
- export type ApiSchemaExtensions<T extends ApiSchemaKind> = T extends 'oneOf' ? { kind: 'oneOf'; oneOf: ApiSchema[] }
200
- : T extends 'multi-type' ?
201
- & {
202
- kind: 'multi-type';
203
- type: ApiSchemaType[];
204
- }
205
- & AdditionalArraySchemaProperties
206
- & AdditionalObjectSchemaProperties
207
- & AdditionalNumberSchemaProperties
208
- & AdditionalStringSchemaProperties
209
- & AdditionalPrimitiveSchemaProperties
210
- : T extends 'string'
211
- ? { kind: 'string'; type: 'string' } & AdditionalStringSchemaProperties & AdditionalPrimitiveSchemaProperties
212
- : T extends 'boolean' ? { kind: 'boolean'; type: 'boolean' } & AdditionalPrimitiveSchemaProperties
213
- : T extends 'null' ? { kind: 'null'; type: 'null' }
214
- : T extends 'number' | 'integer'
215
- ? { kind: 'number' | 'integer'; type: T } & AdditionalNumberSchemaProperties & AdditionalPrimitiveSchemaProperties
216
- : T extends 'array' ? {
217
- kind: 'array';
218
- type: 'array';
219
- } & AdditionalArraySchemaProperties
220
- : T extends 'object' ? {
221
- kind: 'object';
222
- type: 'object';
223
- } & AdditionalObjectSchemaProperties
224
- : T extends 'combined' ? {
225
- kind: 'combined';
226
- } & AdditionalCombinedSchemaProperties
227
- : { kind: 'unknown' };
228
- export type CombinedLikeApiSchema = ApiSchemaBase & {
229
- kind: 'combined' | 'object' | 'multi-type';
230
- type?: 'object' | string[];
231
- } & AdditionalCombinedSchemaProperties;
232
- export type NumberLikeApiSchema =
233
- & ApiSchemaBase
234
- & {
235
- kind: 'number' | 'integer' | 'multi-type';
236
- type: 'number' | 'integer' | string[];
237
- }
238
- & AdditionalNumberSchemaProperties
239
- & AdditionalPrimitiveSchemaProperties;
240
- export type ArrayLikeApiSchema = ApiSchemaBase & {
241
- kind: 'array' | 'multi-type';
242
- type: 'array' | string[];
243
- } & AdditionalArraySchemaProperties;
244
- export type ObjectLikeApiSchema = ApiSchemaBase & {
245
- kind: 'object' | 'multi-type';
246
- type: 'object' | string[];
247
- } & AdditionalObjectSchemaProperties;
248
- export type StringLikeApiSchema =
249
- & ApiSchemaBase
250
- & {
251
- kind: 'string' | 'multi-type';
252
- type: 'string' | string[];
253
- }
254
- & AdditionalStringSchemaProperties
255
- & AdditionalPrimitiveSchemaProperties;
256
- export type PrimitiveLikeApiSchema = ApiSchemaBase & {
257
- kind: 'string' | 'number' | 'integer' | 'boolean' | 'null' | 'multi-type';
258
- type: 'string' | 'number' | 'integer' | 'boolean' | 'null' | string[];
259
- } & AdditionalPrimitiveSchemaProperties;