@api-client/core 0.18.12 → 0.18.13

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 (259) hide show
  1. package/build/src/browser.d.ts +0 -3
  2. package/build/src/browser.d.ts.map +1 -1
  3. package/build/src/browser.js +0 -3
  4. package/build/src/browser.js.map +1 -1
  5. package/build/src/index.d.ts +2 -5
  6. package/build/src/index.d.ts.map +1 -1
  7. package/build/src/index.js +2 -5
  8. package/build/src/index.js.map +1 -1
  9. package/build/src/lib/logging/DefaultLogger.d.ts +14 -0
  10. package/build/src/lib/logging/DefaultLogger.d.ts.map +1 -1
  11. package/build/src/lib/logging/DefaultLogger.js +27 -0
  12. package/build/src/lib/logging/DefaultLogger.js.map +1 -1
  13. package/build/src/lib/logging/index.d.ts +4 -0
  14. package/build/src/lib/logging/index.d.ts.map +1 -0
  15. package/build/src/lib/logging/index.js +10 -0
  16. package/build/src/lib/logging/index.js.map +1 -0
  17. package/build/src/models/ClientCertificate.d.ts +1 -1
  18. package/build/src/models/ClientCertificate.js.map +1 -1
  19. package/build/src/models/RequestConfig.d.ts +1 -1
  20. package/build/src/models/RequestConfig.js.map +1 -1
  21. package/build/src/models/SerializableError.d.ts +1 -1
  22. package/build/src/models/SerializableError.d.ts.map +1 -1
  23. package/build/src/models/SerializableError.js.map +1 -1
  24. package/build/src/proxy/RequestProxy.d.ts.map +1 -1
  25. package/build/src/proxy/RequestProxy.js +2 -2
  26. package/build/src/proxy/RequestProxy.js.map +1 -1
  27. package/build/src/runtime/http-engine/CoreEngine.d.ts +218 -139
  28. package/build/src/runtime/http-engine/CoreEngine.d.ts.map +1 -1
  29. package/build/src/runtime/http-engine/CoreEngine.js +716 -870
  30. package/build/src/runtime/http-engine/CoreEngine.js.map +1 -1
  31. package/build/src/runtime/http-engine/PayloadSupport.d.ts.map +1 -1
  32. package/build/src/runtime/http-engine/PayloadSupport.js +2 -1
  33. package/build/src/runtime/http-engine/PayloadSupport.js.map +1 -1
  34. package/build/src/runtime/http-engine/auth/AuthManager.d.ts +73 -0
  35. package/build/src/runtime/http-engine/auth/AuthManager.d.ts.map +1 -0
  36. package/build/src/runtime/http-engine/auth/AuthManager.js +186 -0
  37. package/build/src/runtime/http-engine/auth/AuthManager.js.map +1 -0
  38. package/build/src/runtime/http-engine/auth/index.d.ts +2 -0
  39. package/build/src/runtime/http-engine/auth/index.d.ts.map +1 -0
  40. package/build/src/runtime/http-engine/auth/index.js +2 -0
  41. package/build/src/runtime/http-engine/auth/index.js.map +1 -0
  42. package/build/src/runtime/http-engine/certificates/CertificateManager.d.ts +11 -0
  43. package/build/src/runtime/http-engine/certificates/CertificateManager.d.ts.map +1 -0
  44. package/build/src/runtime/http-engine/certificates/CertificateManager.js +76 -0
  45. package/build/src/runtime/http-engine/certificates/CertificateManager.js.map +1 -0
  46. package/build/src/runtime/http-engine/certificates/index.d.ts +2 -0
  47. package/build/src/runtime/http-engine/certificates/index.d.ts.map +1 -0
  48. package/build/src/runtime/http-engine/certificates/index.js +2 -0
  49. package/build/src/runtime/http-engine/certificates/index.js.map +1 -0
  50. package/build/src/runtime/http-engine/compression/CompressionManager.d.ts +25 -0
  51. package/build/src/runtime/http-engine/compression/CompressionManager.d.ts.map +1 -0
  52. package/build/src/runtime/http-engine/compression/CompressionManager.js +89 -0
  53. package/build/src/runtime/http-engine/compression/CompressionManager.js.map +1 -0
  54. package/build/src/runtime/http-engine/compression/index.d.ts +2 -0
  55. package/build/src/runtime/http-engine/compression/index.d.ts.map +1 -0
  56. package/build/src/runtime/http-engine/compression/index.js +2 -0
  57. package/build/src/runtime/http-engine/compression/index.js.map +1 -0
  58. package/build/src/runtime/http-engine/connections/ConnectionManager.d.ts +57 -0
  59. package/build/src/runtime/http-engine/connections/ConnectionManager.d.ts.map +1 -0
  60. package/build/src/runtime/http-engine/connections/ConnectionManager.js +78 -0
  61. package/build/src/runtime/http-engine/connections/ConnectionManager.js.map +1 -0
  62. package/build/src/runtime/http-engine/connections/DigestAuthHandler.d.ts +70 -0
  63. package/build/src/runtime/http-engine/connections/DigestAuthHandler.d.ts.map +1 -0
  64. package/build/src/runtime/http-engine/connections/DigestAuthHandler.js +184 -0
  65. package/build/src/runtime/http-engine/connections/DigestAuthHandler.js.map +1 -0
  66. package/build/src/runtime/http-engine/connections/DirectConnection.d.ts +22 -0
  67. package/build/src/runtime/http-engine/connections/DirectConnection.d.ts.map +1 -0
  68. package/build/src/runtime/http-engine/connections/DirectConnection.js +105 -0
  69. package/build/src/runtime/http-engine/connections/DirectConnection.js.map +1 -0
  70. package/build/src/runtime/http-engine/connections/ProxyAuthHandler.d.ts +60 -0
  71. package/build/src/runtime/http-engine/connections/ProxyAuthHandler.d.ts.map +1 -0
  72. package/build/src/runtime/http-engine/connections/ProxyAuthHandler.js +138 -0
  73. package/build/src/runtime/http-engine/connections/ProxyAuthHandler.js.map +1 -0
  74. package/build/src/runtime/http-engine/connections/ProxyConnection.d.ts +14 -0
  75. package/build/src/runtime/http-engine/connections/ProxyConnection.d.ts.map +1 -0
  76. package/build/src/runtime/http-engine/connections/ProxyConnection.js +47 -0
  77. package/build/src/runtime/http-engine/connections/ProxyConnection.js.map +1 -0
  78. package/build/src/runtime/http-engine/connections/TunnelConnection.d.ts +13 -0
  79. package/build/src/runtime/http-engine/connections/TunnelConnection.d.ts.map +1 -0
  80. package/build/src/runtime/http-engine/connections/TunnelConnection.js +175 -0
  81. package/build/src/runtime/http-engine/connections/TunnelConnection.js.map +1 -0
  82. package/build/src/runtime/http-engine/connections/index.d.ts +7 -0
  83. package/build/src/runtime/http-engine/connections/index.d.ts.map +1 -0
  84. package/build/src/runtime/http-engine/connections/index.js +7 -0
  85. package/build/src/runtime/http-engine/connections/index.js.map +1 -0
  86. package/build/src/runtime/http-engine/constants.d.ts +69 -0
  87. package/build/src/runtime/http-engine/constants.d.ts.map +1 -0
  88. package/build/src/runtime/http-engine/constants.js +90 -0
  89. package/build/src/runtime/http-engine/constants.js.map +1 -0
  90. package/build/src/runtime/http-engine/cookies/CookieProcessor.d.ts +5 -0
  91. package/build/src/runtime/http-engine/cookies/CookieProcessor.d.ts.map +1 -0
  92. package/build/src/runtime/http-engine/cookies/CookieProcessor.js +20 -0
  93. package/build/src/runtime/http-engine/cookies/CookieProcessor.js.map +1 -0
  94. package/build/src/runtime/http-engine/cookies/index.d.ts +2 -0
  95. package/build/src/runtime/http-engine/cookies/index.d.ts.map +1 -0
  96. package/build/src/runtime/http-engine/cookies/index.js +2 -0
  97. package/build/src/runtime/http-engine/cookies/index.js.map +1 -0
  98. package/build/src/runtime/http-engine/errors/HttpEngineErrors.d.ts +156 -0
  99. package/build/src/runtime/http-engine/errors/HttpEngineErrors.d.ts.map +1 -0
  100. package/build/src/runtime/http-engine/errors/HttpEngineErrors.js +227 -0
  101. package/build/src/runtime/http-engine/errors/HttpEngineErrors.js.map +1 -0
  102. package/build/src/runtime/http-engine/errors/index.d.ts +2 -0
  103. package/build/src/runtime/http-engine/errors/index.d.ts.map +1 -0
  104. package/build/src/runtime/http-engine/errors/index.js +2 -0
  105. package/build/src/runtime/http-engine/errors/index.js.map +1 -0
  106. package/build/src/runtime/http-engine/message/MessageBuilder.d.ts +66 -0
  107. package/build/src/runtime/http-engine/message/MessageBuilder.d.ts.map +1 -0
  108. package/build/src/runtime/http-engine/message/MessageBuilder.js +161 -0
  109. package/build/src/runtime/http-engine/message/MessageBuilder.js.map +1 -0
  110. package/build/src/runtime/http-engine/message/MessageProcessor.d.ts +27 -0
  111. package/build/src/runtime/http-engine/message/MessageProcessor.d.ts.map +1 -0
  112. package/build/src/runtime/http-engine/message/MessageProcessor.js +51 -0
  113. package/build/src/runtime/http-engine/message/MessageProcessor.js.map +1 -0
  114. package/build/src/runtime/http-engine/message/index.d.ts +3 -0
  115. package/build/src/runtime/http-engine/message/index.d.ts.map +1 -0
  116. package/build/src/runtime/http-engine/message/index.js +3 -0
  117. package/build/src/runtime/http-engine/message/index.js.map +1 -0
  118. package/build/src/runtime/http-engine/ntlm/NtlmAuth.d.ts +2 -8
  119. package/build/src/runtime/http-engine/ntlm/NtlmAuth.d.ts.map +1 -1
  120. package/build/src/runtime/http-engine/ntlm/NtlmAuth.js +11 -5
  121. package/build/src/runtime/http-engine/ntlm/NtlmAuth.js.map +1 -1
  122. package/build/src/runtime/http-engine/ntlm/NtlmMessage.js +6 -6
  123. package/build/src/runtime/http-engine/ntlm/NtlmMessage.js.map +1 -1
  124. package/build/src/runtime/http-engine/parsers/BodyParser.d.ts +39 -0
  125. package/build/src/runtime/http-engine/parsers/BodyParser.d.ts.map +1 -0
  126. package/build/src/runtime/http-engine/parsers/BodyParser.js +145 -0
  127. package/build/src/runtime/http-engine/parsers/BodyParser.js.map +1 -0
  128. package/build/src/runtime/http-engine/parsers/HeadersParser.d.ts +29 -0
  129. package/build/src/runtime/http-engine/parsers/HeadersParser.d.ts.map +1 -0
  130. package/build/src/runtime/http-engine/parsers/HeadersParser.js +88 -0
  131. package/build/src/runtime/http-engine/parsers/HeadersParser.js.map +1 -0
  132. package/build/src/runtime/http-engine/parsers/HttpResponseParser.d.ts +91 -0
  133. package/build/src/runtime/http-engine/parsers/HttpResponseParser.d.ts.map +1 -0
  134. package/build/src/runtime/http-engine/parsers/HttpResponseParser.js +236 -0
  135. package/build/src/runtime/http-engine/parsers/HttpResponseParser.js.map +1 -0
  136. package/build/src/runtime/http-engine/parsers/StatusParser.d.ts +20 -0
  137. package/build/src/runtime/http-engine/parsers/StatusParser.d.ts.map +1 -0
  138. package/build/src/runtime/http-engine/parsers/StatusParser.js +51 -0
  139. package/build/src/runtime/http-engine/parsers/StatusParser.js.map +1 -0
  140. package/build/src/runtime/http-engine/parsers/index.d.ts +5 -0
  141. package/build/src/runtime/http-engine/parsers/index.d.ts.map +1 -0
  142. package/build/src/runtime/http-engine/parsers/index.js +5 -0
  143. package/build/src/runtime/http-engine/parsers/index.js.map +1 -0
  144. package/build/src/runtime/http-engine/response/ResponseProcessor.d.ts +22 -0
  145. package/build/src/runtime/http-engine/response/ResponseProcessor.d.ts.map +1 -0
  146. package/build/src/runtime/http-engine/response/ResponseProcessor.js +25 -0
  147. package/build/src/runtime/http-engine/response/ResponseProcessor.js.map +1 -0
  148. package/build/src/runtime/http-engine/response/index.d.ts +2 -0
  149. package/build/src/runtime/http-engine/response/index.d.ts.map +1 -0
  150. package/build/src/runtime/http-engine/response/index.js +2 -0
  151. package/build/src/runtime/http-engine/response/index.js.map +1 -0
  152. package/build/src/runtime/http-engine/statistics/StatisticsProcessor.d.ts +7 -0
  153. package/build/src/runtime/http-engine/statistics/StatisticsProcessor.d.ts.map +1 -0
  154. package/build/src/runtime/http-engine/statistics/StatisticsProcessor.js +40 -0
  155. package/build/src/runtime/http-engine/statistics/StatisticsProcessor.js.map +1 -0
  156. package/build/src/runtime/http-engine/statistics/index.d.ts +2 -0
  157. package/build/src/runtime/http-engine/statistics/index.d.ts.map +1 -0
  158. package/build/src/runtime/http-engine/statistics/index.js +2 -0
  159. package/build/src/runtime/http-engine/statistics/index.js.map +1 -0
  160. package/build/src/runtime/http-engine/url/UrlProcessor.d.ts +24 -0
  161. package/build/src/runtime/http-engine/url/UrlProcessor.d.ts.map +1 -0
  162. package/build/src/runtime/http-engine/url/UrlProcessor.js +50 -0
  163. package/build/src/runtime/http-engine/url/UrlProcessor.js.map +1 -0
  164. package/build/src/runtime/http-engine/url/index.d.ts +2 -0
  165. package/build/src/runtime/http-engine/url/index.d.ts.map +1 -0
  166. package/build/src/runtime/http-engine/url/index.js +2 -0
  167. package/build/src/runtime/http-engine/url/index.js.map +1 -0
  168. package/build/src/runtime/http-runner/HttpRequestRunner.d.ts +3 -3
  169. package/build/src/runtime/http-runner/HttpRequestRunner.d.ts.map +1 -1
  170. package/build/src/runtime/http-runner/HttpRequestRunner.js.map +1 -1
  171. package/build/src/runtime/node/InteropInterfaces.d.ts +3 -3
  172. package/build/src/runtime/node/InteropInterfaces.d.ts.map +1 -1
  173. package/build/src/runtime/node/InteropInterfaces.js.map +1 -1
  174. package/build/src/runtime/node/ProjectRequestRunner.d.ts +2 -2
  175. package/build/src/runtime/node/ProjectRequestRunner.d.ts.map +1 -1
  176. package/build/src/runtime/node/ProjectRequestRunner.js.map +1 -1
  177. package/build/src/runtime/node/ProjectRunner.d.ts.map +1 -1
  178. package/build/src/runtime/node/ProjectRunner.js +2 -2
  179. package/build/src/runtime/node/ProjectRunner.js.map +1 -1
  180. package/build/tsconfig.tsbuildinfo +1 -1
  181. package/data/models/example-generator-api.json +6 -6
  182. package/package.json +2 -2
  183. package/src/lib/logging/DefaultLogger.ts +32 -0
  184. package/src/models/ClientCertificate.ts +1 -1
  185. package/src/models/RequestConfig.ts +1 -1
  186. package/src/models/SerializableError.ts +1 -1
  187. package/src/proxy/RequestProxy.ts +2 -2
  188. package/src/runtime/http-engine/CoreEngine.ts +858 -893
  189. package/src/runtime/http-engine/PayloadSupport.ts +2 -1
  190. package/src/runtime/http-engine/auth/AuthManager.ts +242 -0
  191. package/src/runtime/http-engine/certificates/CertificateManager.ts +74 -0
  192. package/src/runtime/http-engine/compression/CompressionManager.ts +99 -0
  193. package/src/runtime/http-engine/connections/ConnectionManager.ts +123 -0
  194. package/src/runtime/http-engine/connections/DigestAuthHandler.ts +238 -0
  195. package/src/runtime/http-engine/connections/DirectConnection.ts +134 -0
  196. package/src/runtime/http-engine/connections/ProxyAuthHandler.ts +179 -0
  197. package/src/runtime/http-engine/connections/ProxyConnection.ts +55 -0
  198. package/src/runtime/http-engine/connections/TunnelConnection.ts +192 -0
  199. package/src/runtime/http-engine/constants.ts +103 -0
  200. package/src/runtime/http-engine/cookies/CookieProcessor.ts +25 -0
  201. package/src/runtime/http-engine/errors/HttpEngineErrors.ts +319 -0
  202. package/src/runtime/http-engine/message/MessageBuilder.ts +201 -0
  203. package/src/runtime/http-engine/message/MessageProcessor.ts +73 -0
  204. package/src/runtime/http-engine/ntlm/NtlmAuth.ts +16 -13
  205. package/src/runtime/http-engine/ntlm/NtlmMessage.ts +6 -6
  206. package/src/runtime/http-engine/parsers/BodyParser.ts +171 -0
  207. package/src/runtime/http-engine/parsers/HeadersParser.ts +103 -0
  208. package/src/runtime/http-engine/parsers/HttpResponseParser.ts +280 -0
  209. package/src/runtime/http-engine/parsers/StatusParser.ts +69 -0
  210. package/src/runtime/http-engine/response/ResponseProcessor.ts +46 -0
  211. package/src/runtime/http-engine/statistics/StatisticsProcessor.ts +52 -0
  212. package/src/runtime/http-engine/url/UrlProcessor.ts +55 -0
  213. package/src/runtime/http-runner/HttpRequestRunner.ts +3 -3
  214. package/src/runtime/node/InteropInterfaces.ts +3 -3
  215. package/src/runtime/node/ProjectRequestRunner.ts +2 -2
  216. package/src/runtime/node/ProjectRunner.ts +2 -2
  217. package/tests/servers/ProxyServer.ts +32 -19
  218. package/tests/servers/express-routes/ApiEndpoint.ts +24 -0
  219. package/tests/servers/express-routes/BasicAuthRoute.ts +36 -0
  220. package/tests/servers/express-routes/BearerAuthRoute.ts +35 -0
  221. package/tests/servers/express-routes/NTLMRoute.ts +2 -3
  222. package/tests/servers/express-routes/PostApi.ts +15 -2
  223. package/tests/servers/express-routes/RedirectsApi.ts +12 -1
  224. package/tests/servers/express-routes/ResponsesApi.ts +1 -1
  225. package/tests/servers/express-routes/StreamApi.ts +19 -0
  226. package/tests/servers/oauth2mock/ServerMock.js +1 -1
  227. package/tests/unit/runtime/http-engine/HttpResponseParser.spec.ts +337 -0
  228. package/tests/unit/runtime/http-engine/abort.spec.ts +4 -5
  229. package/tests/unit/runtime/http-engine/auth.spec.ts +7 -58
  230. package/tests/unit/runtime/http-engine/certificates/CertificateManager.spec.ts +482 -0
  231. package/tests/unit/runtime/http-engine/certificates.spec.ts +2 -2
  232. package/tests/unit/runtime/http-engine/compression/CompressionManager.spec.ts +498 -0
  233. package/tests/unit/runtime/http-engine/compression.spec.ts +3 -72
  234. package/tests/unit/runtime/http-engine/connections/ConnectionManager.spec.ts +379 -0
  235. package/tests/unit/runtime/http-engine/connections/DigestAuthHandler.spec.ts +164 -0
  236. package/tests/unit/runtime/http-engine/core_engine.spec.ts +561 -0
  237. package/tests/unit/runtime/http-engine/engine_statuses.spec.ts +2 -2
  238. package/tests/unit/runtime/http-engine/events.spec.ts +2 -2
  239. package/tests/unit/runtime/http-engine/headers.spec.ts +2 -88
  240. package/tests/unit/runtime/http-engine/hosts.spec.ts +2 -2
  241. package/tests/unit/runtime/http-engine/http-get.spec.ts +2 -2
  242. package/tests/unit/runtime/http-engine/http-post.spec.ts +2 -2
  243. package/tests/unit/runtime/http-engine/logger.spec.ts +0 -8
  244. package/tests/unit/runtime/http-engine/message.spec.ts +2 -194
  245. package/tests/unit/runtime/http-engine/params.spec.ts +4 -4
  246. package/tests/unit/runtime/http-engine/proxy.spec.ts +15 -14
  247. package/tests/unit/runtime/http-engine/redirects.spec.ts +2 -2
  248. package/tests/unit/runtime/http-engine/responses.spec.ts +170 -277
  249. package/tests/unit/runtime/http-engine/timeout.spec.ts +3 -3
  250. package/tests/unit/runtime/http-engine/timings.spec.ts +2 -2
  251. package/tests/unit/runtime/proxy/HttpProjectProxy.spec.ts +25 -28
  252. package/tests/unit/runtime/runners/project_runner.spec.ts +2 -2
  253. package/tests/unit/runtime/runners/request_runner.spec.ts +2 -2
  254. package/build/src/runtime/http-engine/HttpEngine.d.ts +0 -311
  255. package/build/src/runtime/http-engine/HttpEngine.d.ts.map +0 -1
  256. package/build/src/runtime/http-engine/HttpEngine.js +0 -802
  257. package/build/src/runtime/http-engine/HttpEngine.js.map +0 -1
  258. package/src/runtime/http-engine/HttpEngine.ts +0 -952
  259. package/tests/unit/runtime/http-engine/connecting.spec.ts +0 -140
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../../src/runtime/node/ProjectRunner.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-redeclare */\n/* eslint-disable @typescript-eslint/unified-signatures */\n/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\nimport { SerializableError } from '../../models/SerializableError.js'\nimport { HttpProject } from '../../models/HttpProject.js'\nimport { ProjectFolder } from '../../models/ProjectFolder.js'\nimport { Environment, IEnvironment } from '../../models/Environment.js'\nimport { DummyLogger } from '../../lib/logging/DummyLogger.js'\nimport { IRequestLog } from '../../models/RequestLog.js'\nimport { IHttpRequest } from '../../models/HttpRequest.js'\nimport { ProjectRequestRunner } from './ProjectRequestRunner.js'\nimport { IProjectExecutionIteration, IProjectExecutionLog } from '../../models/ProjectExecution.js'\nimport { pathExists, readJson } from '../../lib/fs/Fs.js'\nimport { BaseRunner } from './BaseRunner.js'\nimport { IProjectRunnerOptions, IRequestRunnerOptions } from './InteropInterfaces.js'\nimport { State } from './enums.js'\n\ntype ProjectParent = HttpProject | ProjectFolder\n\nexport interface ProjectRunner {\n /**\n * Event dispatched when an iteration is about to start.\n */\n on(event: 'before-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched when an iteration finished.\n */\n on(event: 'after-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched before the iteration is going to sleep for the set period of time.\n */\n on(event: 'before-sleep', listener: () => void): this\n /**\n * Event dispatched after the iteration is woke up.\n */\n on(event: 'after-sleep', listener: () => void): this\n /**\n * The request object is prepared and about to be sent to the HTTP engine\n */\n on(event: 'request', listener: (key: string, request: IHttpRequest) => void): this\n /**\n * The response is ready.\n */\n on(event: 'response', listener: (key: string, log: IRequestLog) => void): this\n /**\n * There was a general error during the request\n */\n on(event: 'error', listener: (key: string, log: IRequestLog, message: string) => void): this\n /**\n * Event dispatched when an iteration is about to start.\n */\n once(event: 'before-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched when an iteration finished.\n */\n once(event: 'after-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched before the iteration is going to sleep for the set period of time.\n */\n once(event: 'before-sleep', listener: () => void): this\n /**\n * Event dispatched after the iteration is woke up.\n */\n once(event: 'after-sleep', listener: () => void): this\n /**\n * The request object is prepared and about to be sent to the HTTP engine\n */\n once(event: 'request', listener: (key: string, request: IHttpRequest) => void): this\n /**\n * The response is ready.\n */\n once(event: 'response', listener: (key: string, log: IRequestLog) => void): this\n /**\n * There was a general error during the request\n */\n once(event: 'error', listener: (key: string, log: IRequestLog, message: string) => void): this\n}\n\n/**\n * A class to be extended to run an entire API Project for the given configuration options.\n *\n * The main purpose of this class (and its children) is to iterate over requests\n * in the project and execute them one-by-one.\n *\n * Implementations allow to execute the requests in a serial model or in parallel mode, where\n * a separate workers are created to run the same HTTP requests in each worker.\n *\n * This class generates a run report which other programs can use to build all kinds of UIs\n * around the data collected during the run.\n */\nexport abstract class ProjectRunner extends BaseRunner {\n /**\n * The HTTP project to run requests from.\n */\n project?: HttpProject\n /**\n * The execution options for the project.\n */\n options?: IProjectRunnerOptions\n /**\n * The root object (project or a folder) where the program starts iterating over the requests.\n */\n root?: ProjectParent\n /**\n * The selected environment to apply to the requests.\n */\n environment?: Environment\n /**\n * This is used with `--iterations`. The index of the current iteration.\n */\n protected index = 0\n /**\n * The currently executed iteration loop.\n */\n protected currentIteration?: IProjectExecutionIteration\n /**\n * The number of remaining iterations to run.\n */\n protected remaining = 1\n /**\n * Whether the configuration allows iterations (the parallel mode).\n */\n protected hasIterations = false\n /**\n * When set it won't amit any event.\n * This can be used in a background worker when events are never handled.\n */\n noEmit = false\n\n /**\n * When executing, this is the last user request runner.\n */\n protected _runner?: ProjectRequestRunner\n\n protected _state: State = State.Idle\n\n get state(): State {\n return this._state\n }\n\n protected _signal?: AbortSignal\n\n /**\n * The abort signal to set on this request.\n * Aborts the request when the signal fires.\n * @type {(AbortSignal | undefined)}\n */\n get signal(): AbortSignal | undefined {\n return this._signal\n }\n\n set signal(value: AbortSignal | undefined) {\n const old = this._signal\n if (old === value) {\n return\n }\n this._signal = value\n if (old) {\n old.removeEventListener('abort', this._abortHandler)\n }\n if (value) {\n value.addEventListener('abort', this._abortHandler)\n }\n }\n\n constructor() {\n super()\n this._requestHandler = this._requestHandler.bind(this)\n this._responseHandler = this._responseHandler.bind(this)\n this._errorHandler = this._errorHandler.bind(this)\n this._abortHandler = this._abortHandler.bind(this)\n }\n\n /**\n * A required step before running the project.\n * It configures the execution context. It may throw an error when configuration is not valid.\n */\n async configure(project: HttpProject, opts: IProjectRunnerOptions = {}): Promise<void> {\n this.project = project\n this.options = opts || {}\n if (typeof this.options.iterations === 'number' && this.options.iterations >= 0) {\n this.remaining = this.options.iterations\n }\n this.hasIterations = this.remaining > 1\n\n const root = opts.parent ? project.findFolder(opts.parent) : project\n if (!root) {\n throw new Error(`Unable to locate the folder: ${opts.parent}`)\n }\n this.root = root\n this.environment = await this.getEnvironment()\n if (opts.signal) {\n this.signal = opts.signal\n }\n }\n\n /**\n * Executes the requests in the project.\n * @returns The execution log created by calling the `createReport()` function.\n */\n abstract execute(): Promise<IProjectExecutionLog>\n\n /**\n * Aborts the current run.\n * The promise returned by the `execute()` method will reject if not yet resolved.\n */\n abort(): void {\n this._state = State.Aborted\n if (this._runner) {\n this._runner.abort()\n }\n }\n\n /**\n * Handler for the `abort` event on the `AbortSignal`.\n */\n protected _abortHandler(): void {\n this.abort()\n }\n\n /**\n * Creates the report of the execution.\n */\n protected override async createReport(): Promise<IProjectExecutionLog> {\n const log: IProjectExecutionLog = {\n started: this.startTime as number,\n ended: this.endTime as number,\n iterations: this.executed,\n }\n return log\n }\n\n /**\n * Reads the environment data to use with the execution.\n * If the configured environment is a location of a file\n * it is read as API Client's environment and used in the execution.\n * Otherwise it searches for the environment in the list of the defined\n * environments by the name of the key.\n *\n * It throws when the environment cannot be found or when the file contents is invalid.\n */\n protected async getEnvironment(): Promise<Environment | undefined> {\n const { options } = this\n if (!options) {\n throw new Error(`Run configure() first.`)\n }\n if (!options.environment) {\n return\n }\n const fileExists = await pathExists(options.environment)\n if (fileExists) {\n const contents = await readJson(options.environment)\n return new Environment(contents as IEnvironment)\n }\n const root = this.root as ProjectParent\n const envs = root.getEnvironments()\n const env = envs.find((i) => i.key === options.environment || i.info.name === options.environment)\n if (!env) {\n throw new SerializableError(`The environment cannot be found: ${options.environment}.`, 'EENVNOTFOUND')\n }\n return env\n }\n\n protected async getProjectRunnerOptions(): Promise<IRequestRunnerOptions> {\n const { environment, options } = this\n if (!options) {\n throw new Error(`Run configure() first.`)\n }\n const result: IRequestRunnerOptions = {\n variables: this.prepareVariables(),\n }\n if (environment) {\n result.environment = environment\n }\n if (options.logger) {\n result.logger = options.logger\n } else {\n result.logger = new DummyLogger()\n }\n if (options.cookies) {\n result.cookies = options.cookies\n }\n return result\n }\n\n /**\n * Runs the requests from the project as configured.\n */\n protected async executeIteration(): Promise<void> {\n if (this._state === State.Aborted) {\n throw new Error(`The execution has been aborted.`)\n }\n const { project, options, hasIterations, index, noEmit } = this\n if (!options || !project) {\n throw new Error(`Run configure() first.`)\n }\n if (!noEmit) {\n this.emit('before-iteration', index, hasIterations)\n }\n const runnerOptions = await this.getProjectRunnerOptions()\n const runner = new ProjectRequestRunner(project, runnerOptions)\n this._runner = runner\n runner.on('request', this._requestHandler)\n runner.on('response', this._responseHandler)\n runner.on('error', this._errorHandler)\n this.currentIteration = {\n index: this.index,\n executed: [],\n variables: {},\n }\n try {\n const info = await runner.run({\n parent: options.parent,\n requests: options.request,\n ignore: options.ignore,\n recursive: options.recursive,\n })\n this.currentIteration.variables = info.variables\n } catch (e) {\n const cause = e as Error\n this.options?.logger?.error(e)\n this.currentIteration.error = cause.message || 'Unknown error ocurred'\n // ...\n }\n this.executed.push(this.currentIteration)\n if (!noEmit) {\n this.emit('after-iteration', index, hasIterations)\n }\n }\n\n /**\n * Retargets the \"request\" event from the factory.\n */\n protected _requestHandler(key: string, request: IHttpRequest): void {\n if (!this.noEmit) {\n this.emit('request', key, request)\n }\n }\n\n /**\n * Retargets the \"response\" event from the factory.\n */\n protected _responseHandler(key: string, log: IRequestLog): void {\n this.currentIteration?.executed.push(log)\n if (!this.noEmit) {\n this.emit('response', key, log)\n }\n }\n\n /**\n * Retargets the \"error\" event from the factory.\n */\n protected _errorHandler(key: string, log: IRequestLog, message: string): void {\n this.currentIteration?.executed.push(log)\n if (!this.noEmit) {\n this.emit('error', key, log, message)\n }\n }\n\n /**\n * @returns Reads the system variables based on the library configuration.\n */\n protected prepareVariables(): Record<string, string> {\n const result: Record<string, string> = {}\n const { options } = this\n if (!options) {\n return result\n }\n const { variables } = options\n if (typeof variables === 'undefined') {\n return result\n }\n if (typeof variables === 'boolean') {\n return variables ? this._readSystemVariables() : result\n }\n if (Array.isArray(variables)) {\n return this._readSystemVariables(variables)\n }\n return variables\n }\n\n private _readSystemVariables(names?: string[]): Record<string, string> {\n const result: Record<string, string> = {}\n Object.keys(process.env).forEach((key) => {\n if (names && !names.includes(key)) {\n return\n }\n const value = process.env[key]\n if (value) {\n result[key] = value\n }\n })\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../../src/runtime/node/ProjectRunner.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,0DAA0D;AAC1D,qEAAqE;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAGrE,OAAO,EAAE,WAAW,EAAgB,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AA+DzD;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,aAAc,SAAQ,UAAU;IACpD;;OAEG;IACH,OAAO,CAAc;IACrB;;OAEG;IACH,OAAO,CAAwB;IAC/B;;OAEG;IACH,IAAI,CAAgB;IACpB;;OAEG;IACH,WAAW,CAAc;IACzB;;OAEG;IACO,KAAK,GAAG,CAAC,CAAA;IACnB;;OAEG;IACO,gBAAgB,CAA6B;IACvD;;OAEG;IACO,SAAS,GAAG,CAAC,CAAA;IACvB;;OAEG;IACO,aAAa,GAAG,KAAK,CAAA;IAC/B;;;OAGG;IACH,MAAM,GAAG,KAAK,CAAA;IAEd;;OAEG;IACO,OAAO,CAAuB;IAE9B,MAAM,GAAU,KAAK,CAAC,IAAI,CAAA;IAEpC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAES,OAAO,CAAc;IAE/B;;;;OAIG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,KAA8B;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAA;QACxB,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IAED;QACE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,OAAoB,EAAE,OAA8B,EAAE;QACpE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAA;QACzB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;YAChF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAA;QAC1C,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QACpE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC3B,CAAC;IACH,CAAC;IAQD;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAA;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACO,aAAa;QACrB,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED;;OAEG;IACgB,KAAK,CAAC,YAAY;QACnC,MAAM,GAAG,GAAyB;YAChC,OAAO,EAAE,IAAI,CAAC,SAAmB;YACjC,KAAK,EAAE,IAAI,CAAC,OAAiB;YAC7B,UAAU,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAA;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,cAAc;QAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,OAAM;QACR,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACxD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YACpD,OAAO,IAAI,WAAW,CAAC,QAAwB,CAAC,CAAA;QAClD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAqB,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;QAClG,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,iBAAiB,CAAC,oCAAoC,OAAO,CAAC,WAAW,GAAG,EAAE,cAAc,CAAC,CAAA;QACzG,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAES,KAAK,CAAC,uBAAuB;QACrC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QACD,MAAM,MAAM,GAA0B;YACpC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;SACnC,CAAA;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,WAAW,GAAG,WAAW,CAAA;QAClC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,CAAA;QAChC,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAClC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,gBAAgB;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC/D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAC/D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAC1C,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACtC,IAAI,CAAC,gBAAgB,GAAG;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;SACd,CAAA;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,OAAO;gBACzB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAA;YACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAU,CAAA;YACxB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,uBAAuB,CAAA;YACtE,MAAM;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,GAAW,EAAE,OAAqB;QAC1D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACO,gBAAgB,CAAC,GAAW,EAAE,GAAgB;QACtD,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACO,aAAa,CAAC,GAAW,EAAE,GAAgB,EAAE,OAAe;QACpE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACO,gBAAgB;QACxB,MAAM,MAAM,GAA2B,EAAE,CAAA;QACzC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,MAAM,CAAA;QACf,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;QAC7B,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;YACrC,OAAO,MAAM,CAAA;QACf,CAAC;QACD,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAC7C,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,oBAAoB,CAAC,KAAgB;QAC3C,MAAM,MAAM,GAA2B,EAAE,CAAA;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACvC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAM;YACR,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACrB,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["/* eslint-disable no-redeclare */\n/* eslint-disable @typescript-eslint/unified-signatures */\n/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\nimport { SerializableError } from '../../models/SerializableError.js'\nimport { HttpProject } from '../../models/HttpProject.js'\nimport { ProjectFolder } from '../../models/ProjectFolder.js'\nimport { Environment, IEnvironment } from '../../models/Environment.js'\nimport { IRequestLog } from '../../models/RequestLog.js'\nimport { IHttpRequest } from '../../models/HttpRequest.js'\nimport { ProjectRequestRunner } from './ProjectRequestRunner.js'\nimport { IProjectExecutionIteration, IProjectExecutionLog } from '../../models/ProjectExecution.js'\nimport { pathExists, readJson } from '../../lib/fs/Fs.js'\nimport { BaseRunner } from './BaseRunner.js'\nimport { IProjectRunnerOptions, IRequestRunnerOptions } from './InteropInterfaces.js'\nimport { State } from './enums.js'\nimport { createLogger } from '../../lib/logging/index.js'\n\ntype ProjectParent = HttpProject | ProjectFolder\n\nexport interface ProjectRunner {\n /**\n * Event dispatched when an iteration is about to start.\n */\n on(event: 'before-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched when an iteration finished.\n */\n on(event: 'after-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched before the iteration is going to sleep for the set period of time.\n */\n on(event: 'before-sleep', listener: () => void): this\n /**\n * Event dispatched after the iteration is woke up.\n */\n on(event: 'after-sleep', listener: () => void): this\n /**\n * The request object is prepared and about to be sent to the HTTP engine\n */\n on(event: 'request', listener: (key: string, request: IHttpRequest) => void): this\n /**\n * The response is ready.\n */\n on(event: 'response', listener: (key: string, log: IRequestLog) => void): this\n /**\n * There was a general error during the request\n */\n on(event: 'error', listener: (key: string, log: IRequestLog, message: string) => void): this\n /**\n * Event dispatched when an iteration is about to start.\n */\n once(event: 'before-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched when an iteration finished.\n */\n once(event: 'after-iteration', listener: (index: number, iterated: boolean) => void): this\n /**\n * Event dispatched before the iteration is going to sleep for the set period of time.\n */\n once(event: 'before-sleep', listener: () => void): this\n /**\n * Event dispatched after the iteration is woke up.\n */\n once(event: 'after-sleep', listener: () => void): this\n /**\n * The request object is prepared and about to be sent to the HTTP engine\n */\n once(event: 'request', listener: (key: string, request: IHttpRequest) => void): this\n /**\n * The response is ready.\n */\n once(event: 'response', listener: (key: string, log: IRequestLog) => void): this\n /**\n * There was a general error during the request\n */\n once(event: 'error', listener: (key: string, log: IRequestLog, message: string) => void): this\n}\n\n/**\n * A class to be extended to run an entire API Project for the given configuration options.\n *\n * The main purpose of this class (and its children) is to iterate over requests\n * in the project and execute them one-by-one.\n *\n * Implementations allow to execute the requests in a serial model or in parallel mode, where\n * a separate workers are created to run the same HTTP requests in each worker.\n *\n * This class generates a run report which other programs can use to build all kinds of UIs\n * around the data collected during the run.\n */\nexport abstract class ProjectRunner extends BaseRunner {\n /**\n * The HTTP project to run requests from.\n */\n project?: HttpProject\n /**\n * The execution options for the project.\n */\n options?: IProjectRunnerOptions\n /**\n * The root object (project or a folder) where the program starts iterating over the requests.\n */\n root?: ProjectParent\n /**\n * The selected environment to apply to the requests.\n */\n environment?: Environment\n /**\n * This is used with `--iterations`. The index of the current iteration.\n */\n protected index = 0\n /**\n * The currently executed iteration loop.\n */\n protected currentIteration?: IProjectExecutionIteration\n /**\n * The number of remaining iterations to run.\n */\n protected remaining = 1\n /**\n * Whether the configuration allows iterations (the parallel mode).\n */\n protected hasIterations = false\n /**\n * When set it won't amit any event.\n * This can be used in a background worker when events are never handled.\n */\n noEmit = false\n\n /**\n * When executing, this is the last user request runner.\n */\n protected _runner?: ProjectRequestRunner\n\n protected _state: State = State.Idle\n\n get state(): State {\n return this._state\n }\n\n protected _signal?: AbortSignal\n\n /**\n * The abort signal to set on this request.\n * Aborts the request when the signal fires.\n * @type {(AbortSignal | undefined)}\n */\n get signal(): AbortSignal | undefined {\n return this._signal\n }\n\n set signal(value: AbortSignal | undefined) {\n const old = this._signal\n if (old === value) {\n return\n }\n this._signal = value\n if (old) {\n old.removeEventListener('abort', this._abortHandler)\n }\n if (value) {\n value.addEventListener('abort', this._abortHandler)\n }\n }\n\n constructor() {\n super()\n this._requestHandler = this._requestHandler.bind(this)\n this._responseHandler = this._responseHandler.bind(this)\n this._errorHandler = this._errorHandler.bind(this)\n this._abortHandler = this._abortHandler.bind(this)\n }\n\n /**\n * A required step before running the project.\n * It configures the execution context. It may throw an error when configuration is not valid.\n */\n async configure(project: HttpProject, opts: IProjectRunnerOptions = {}): Promise<void> {\n this.project = project\n this.options = opts || {}\n if (typeof this.options.iterations === 'number' && this.options.iterations >= 0) {\n this.remaining = this.options.iterations\n }\n this.hasIterations = this.remaining > 1\n\n const root = opts.parent ? project.findFolder(opts.parent) : project\n if (!root) {\n throw new Error(`Unable to locate the folder: ${opts.parent}`)\n }\n this.root = root\n this.environment = await this.getEnvironment()\n if (opts.signal) {\n this.signal = opts.signal\n }\n }\n\n /**\n * Executes the requests in the project.\n * @returns The execution log created by calling the `createReport()` function.\n */\n abstract execute(): Promise<IProjectExecutionLog>\n\n /**\n * Aborts the current run.\n * The promise returned by the `execute()` method will reject if not yet resolved.\n */\n abort(): void {\n this._state = State.Aborted\n if (this._runner) {\n this._runner.abort()\n }\n }\n\n /**\n * Handler for the `abort` event on the `AbortSignal`.\n */\n protected _abortHandler(): void {\n this.abort()\n }\n\n /**\n * Creates the report of the execution.\n */\n protected override async createReport(): Promise<IProjectExecutionLog> {\n const log: IProjectExecutionLog = {\n started: this.startTime as number,\n ended: this.endTime as number,\n iterations: this.executed,\n }\n return log\n }\n\n /**\n * Reads the environment data to use with the execution.\n * If the configured environment is a location of a file\n * it is read as API Client's environment and used in the execution.\n * Otherwise it searches for the environment in the list of the defined\n * environments by the name of the key.\n *\n * It throws when the environment cannot be found or when the file contents is invalid.\n */\n protected async getEnvironment(): Promise<Environment | undefined> {\n const { options } = this\n if (!options) {\n throw new Error(`Run configure() first.`)\n }\n if (!options.environment) {\n return\n }\n const fileExists = await pathExists(options.environment)\n if (fileExists) {\n const contents = await readJson(options.environment)\n return new Environment(contents as IEnvironment)\n }\n const root = this.root as ProjectParent\n const envs = root.getEnvironments()\n const env = envs.find((i) => i.key === options.environment || i.info.name === options.environment)\n if (!env) {\n throw new SerializableError(`The environment cannot be found: ${options.environment}.`, 'EENVNOTFOUND')\n }\n return env\n }\n\n protected async getProjectRunnerOptions(): Promise<IRequestRunnerOptions> {\n const { environment, options } = this\n if (!options) {\n throw new Error(`Run configure() first.`)\n }\n const result: IRequestRunnerOptions = {\n variables: this.prepareVariables(),\n }\n if (environment) {\n result.environment = environment\n }\n if (options.logger) {\n result.logger = options.logger\n } else {\n result.logger = createLogger()\n }\n if (options.cookies) {\n result.cookies = options.cookies\n }\n return result\n }\n\n /**\n * Runs the requests from the project as configured.\n */\n protected async executeIteration(): Promise<void> {\n if (this._state === State.Aborted) {\n throw new Error(`The execution has been aborted.`)\n }\n const { project, options, hasIterations, index, noEmit } = this\n if (!options || !project) {\n throw new Error(`Run configure() first.`)\n }\n if (!noEmit) {\n this.emit('before-iteration', index, hasIterations)\n }\n const runnerOptions = await this.getProjectRunnerOptions()\n const runner = new ProjectRequestRunner(project, runnerOptions)\n this._runner = runner\n runner.on('request', this._requestHandler)\n runner.on('response', this._responseHandler)\n runner.on('error', this._errorHandler)\n this.currentIteration = {\n index: this.index,\n executed: [],\n variables: {},\n }\n try {\n const info = await runner.run({\n parent: options.parent,\n requests: options.request,\n ignore: options.ignore,\n recursive: options.recursive,\n })\n this.currentIteration.variables = info.variables\n } catch (e) {\n const cause = e as Error\n this.options?.logger?.error(e)\n this.currentIteration.error = cause.message || 'Unknown error ocurred'\n // ...\n }\n this.executed.push(this.currentIteration)\n if (!noEmit) {\n this.emit('after-iteration', index, hasIterations)\n }\n }\n\n /**\n * Retargets the \"request\" event from the factory.\n */\n protected _requestHandler(key: string, request: IHttpRequest): void {\n if (!this.noEmit) {\n this.emit('request', key, request)\n }\n }\n\n /**\n * Retargets the \"response\" event from the factory.\n */\n protected _responseHandler(key: string, log: IRequestLog): void {\n this.currentIteration?.executed.push(log)\n if (!this.noEmit) {\n this.emit('response', key, log)\n }\n }\n\n /**\n * Retargets the \"error\" event from the factory.\n */\n protected _errorHandler(key: string, log: IRequestLog, message: string): void {\n this.currentIteration?.executed.push(log)\n if (!this.noEmit) {\n this.emit('error', key, log, message)\n }\n }\n\n /**\n * @returns Reads the system variables based on the library configuration.\n */\n protected prepareVariables(): Record<string, string> {\n const result: Record<string, string> = {}\n const { options } = this\n if (!options) {\n return result\n }\n const { variables } = options\n if (typeof variables === 'undefined') {\n return result\n }\n if (typeof variables === 'boolean') {\n return variables ? this._readSystemVariables() : result\n }\n if (Array.isArray(variables)) {\n return this._readSystemVariables(variables)\n }\n return variables\n }\n\n private _readSystemVariables(names?: string[]): Record<string, string> {\n const result: Record<string, string> = {}\n Object.keys(process.env).forEach((key) => {\n if (names && !names.includes(key)) {\n return\n }\n const value = process.env[key]\n if (value) {\n result[key] = value\n }\n })\n return result\n }\n}\n"]}