@typespec/spector 0.1.0-alpha.0

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 (254) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE +21 -0
  3. package/cmd/cli.mjs +3 -0
  4. package/dist/generated-defs/TypeSpec.Spector.d.ts +22 -0
  5. package/dist/generated-defs/TypeSpec.Spector.d.ts.map +1 -0
  6. package/dist/generated-defs/TypeSpec.Spector.js +2 -0
  7. package/dist/generated-defs/TypeSpec.Spector.js.map +1 -0
  8. package/dist/generated-defs/TypeSpec.Spector.ts-test.d.ts +2 -0
  9. package/dist/generated-defs/TypeSpec.Spector.ts-test.d.ts.map +1 -0
  10. package/dist/generated-defs/TypeSpec.Spector.ts-test.js +5 -0
  11. package/dist/generated-defs/TypeSpec.Spector.ts-test.js.map +1 -0
  12. package/dist/src/actions/check-coverage.d.ts +11 -0
  13. package/dist/src/actions/check-coverage.d.ts.map +1 -0
  14. package/dist/src/actions/check-coverage.js +77 -0
  15. package/dist/src/actions/check-coverage.js.map +1 -0
  16. package/dist/src/actions/generate-scenario-summary.d.ts +9 -0
  17. package/dist/src/actions/generate-scenario-summary.d.ts.map +1 -0
  18. package/dist/src/actions/generate-scenario-summary.js +49 -0
  19. package/dist/src/actions/generate-scenario-summary.js.map +1 -0
  20. package/dist/src/actions/helper.d.ts +21 -0
  21. package/dist/src/actions/helper.d.ts.map +1 -0
  22. package/dist/src/actions/helper.js +81 -0
  23. package/dist/src/actions/helper.js.map +1 -0
  24. package/dist/src/actions/index.d.ts +2 -0
  25. package/dist/src/actions/index.d.ts.map +1 -0
  26. package/dist/src/actions/index.js +2 -0
  27. package/dist/src/actions/index.js.map +1 -0
  28. package/dist/src/actions/serve.d.ts +12 -0
  29. package/dist/src/actions/serve.d.ts.map +1 -0
  30. package/dist/src/actions/serve.js +73 -0
  31. package/dist/src/actions/serve.js.map +1 -0
  32. package/dist/src/actions/server-test.d.ts +7 -0
  33. package/dist/src/actions/server-test.d.ts.map +1 -0
  34. package/dist/src/actions/server-test.js +165 -0
  35. package/dist/src/actions/server-test.js.map +1 -0
  36. package/dist/src/actions/upload-coverage-report.d.ts +10 -0
  37. package/dist/src/actions/upload-coverage-report.d.ts.map +1 -0
  38. package/dist/src/actions/upload-coverage-report.js +19 -0
  39. package/dist/src/actions/upload-coverage-report.js.map +1 -0
  40. package/dist/src/actions/upload-scenario-manifest.d.ts +6 -0
  41. package/dist/src/actions/upload-scenario-manifest.d.ts.map +1 -0
  42. package/dist/src/actions/upload-scenario-manifest.js +18 -0
  43. package/dist/src/actions/upload-scenario-manifest.js.map +1 -0
  44. package/dist/src/actions/validate-mock-apis.d.ts +7 -0
  45. package/dist/src/actions/validate-mock-apis.d.ts.map +1 -0
  46. package/dist/src/actions/validate-mock-apis.js +71 -0
  47. package/dist/src/actions/validate-mock-apis.js.map +1 -0
  48. package/dist/src/actions/validate-scenarios.d.ts +7 -0
  49. package/dist/src/actions/validate-scenarios.d.ts.map +1 -0
  50. package/dist/src/actions/validate-scenarios.js +25 -0
  51. package/dist/src/actions/validate-scenarios.js.map +1 -0
  52. package/dist/src/app/app.d.ts +17 -0
  53. package/dist/src/app/app.d.ts.map +1 -0
  54. package/dist/src/app/app.js +134 -0
  55. package/dist/src/app/app.js.map +1 -0
  56. package/dist/src/app/config.d.ts +15 -0
  57. package/dist/src/app/config.d.ts.map +1 -0
  58. package/dist/src/app/config.js +2 -0
  59. package/dist/src/app/config.js.map +1 -0
  60. package/dist/src/app/index.d.ts +3 -0
  61. package/dist/src/app/index.d.ts.map +1 -0
  62. package/dist/src/app/index.js +3 -0
  63. package/dist/src/app/index.js.map +1 -0
  64. package/dist/src/app/request-processor.d.ts +5 -0
  65. package/dist/src/app/request-processor.d.ts.map +1 -0
  66. package/dist/src/app/request-processor.js +44 -0
  67. package/dist/src/app/request-processor.js.map +1 -0
  68. package/dist/src/cli/cli.d.ts +3 -0
  69. package/dist/src/cli/cli.d.ts.map +1 -0
  70. package/dist/src/cli/cli.js +316 -0
  71. package/dist/src/cli/cli.js.map +1 -0
  72. package/dist/src/config/config-schema.d.ts +4 -0
  73. package/dist/src/config/config-schema.d.ts.map +1 -0
  74. package/dist/src/config/config-schema.js +14 -0
  75. package/dist/src/config/config-schema.js.map +1 -0
  76. package/dist/src/config/config.d.ts +4 -0
  77. package/dist/src/config/config.d.ts.map +1 -0
  78. package/dist/src/config/config.js +12 -0
  79. package/dist/src/config/config.js.map +1 -0
  80. package/dist/src/config/schema-validator.d.ts +18 -0
  81. package/dist/src/config/schema-validator.d.ts.map +1 -0
  82. package/dist/src/config/schema-validator.js +43 -0
  83. package/dist/src/config/schema-validator.js.map +1 -0
  84. package/dist/src/config/types.d.ts +4 -0
  85. package/dist/src/config/types.d.ts.map +1 -0
  86. package/dist/src/config/types.js +2 -0
  87. package/dist/src/config/types.js.map +1 -0
  88. package/dist/src/constants.d.ts +4 -0
  89. package/dist/src/constants.d.ts.map +1 -0
  90. package/dist/src/constants.js +4 -0
  91. package/dist/src/constants.js.map +1 -0
  92. package/dist/src/coverage/common.d.ts +3 -0
  93. package/dist/src/coverage/common.d.ts.map +1 -0
  94. package/dist/src/coverage/common.js +9 -0
  95. package/dist/src/coverage/common.js.map +1 -0
  96. package/dist/src/coverage/coverage-report.d.ts +3 -0
  97. package/dist/src/coverage/coverage-report.d.ts.map +1 -0
  98. package/dist/src/coverage/coverage-report.js +9 -0
  99. package/dist/src/coverage/coverage-report.js.map +1 -0
  100. package/dist/src/coverage/coverage-tracker.d.ts +17 -0
  101. package/dist/src/coverage/coverage-tracker.d.ts.map +1 -0
  102. package/dist/src/coverage/coverage-tracker.js +125 -0
  103. package/dist/src/coverage/coverage-tracker.js.map +1 -0
  104. package/dist/src/coverage/index.d.ts +2 -0
  105. package/dist/src/coverage/index.d.ts.map +1 -0
  106. package/dist/src/coverage/index.js +2 -0
  107. package/dist/src/coverage/index.js.map +1 -0
  108. package/dist/src/coverage/scenario-manifest.d.ts +6 -0
  109. package/dist/src/coverage/scenario-manifest.d.ts.map +1 -0
  110. package/dist/src/coverage/scenario-manifest.js +32 -0
  111. package/dist/src/coverage/scenario-manifest.js.map +1 -0
  112. package/dist/src/index.d.ts +2 -0
  113. package/dist/src/index.d.ts.map +1 -0
  114. package/dist/src/index.js +2 -0
  115. package/dist/src/index.js.map +1 -0
  116. package/dist/src/lib/decorators.d.ts +24 -0
  117. package/dist/src/lib/decorators.d.ts.map +1 -0
  118. package/dist/src/lib/decorators.js +158 -0
  119. package/dist/src/lib/decorators.js.map +1 -0
  120. package/dist/src/lib/index.d.ts +4 -0
  121. package/dist/src/lib/index.d.ts.map +1 -0
  122. package/dist/src/lib/index.js +6 -0
  123. package/dist/src/lib/index.js.map +1 -0
  124. package/dist/src/lib/lib.d.ts +33 -0
  125. package/dist/src/lib/lib.d.ts.map +1 -0
  126. package/dist/src/lib/lib.js +31 -0
  127. package/dist/src/lib/lib.js.map +1 -0
  128. package/dist/src/lib/tsp-index.d.ts +2 -0
  129. package/dist/src/lib/tsp-index.d.ts.map +1 -0
  130. package/dist/src/lib/tsp-index.js +11 -0
  131. package/dist/src/lib/tsp-index.js.map +1 -0
  132. package/dist/src/lib/validate.d.ts +3 -0
  133. package/dist/src/lib/validate.d.ts.map +1 -0
  134. package/dist/src/lib/validate.js +41 -0
  135. package/dist/src/lib/validate.js.map +1 -0
  136. package/dist/src/logger.d.ts +3 -0
  137. package/dist/src/logger.d.ts.map +1 -0
  138. package/dist/src/logger.js +10 -0
  139. package/dist/src/logger.js.map +1 -0
  140. package/dist/src/routes/admin.d.ts +3 -0
  141. package/dist/src/routes/admin.d.ts.map +1 -0
  142. package/dist/src/routes/admin.js +13 -0
  143. package/dist/src/routes/admin.js.map +1 -0
  144. package/dist/src/routes/index.d.ts +3 -0
  145. package/dist/src/routes/index.d.ts.map +1 -0
  146. package/dist/src/routes/index.js +6 -0
  147. package/dist/src/routes/index.js.map +1 -0
  148. package/dist/src/scenarios-resolver.d.ts +17 -0
  149. package/dist/src/scenarios-resolver.d.ts.map +1 -0
  150. package/dist/src/scenarios-resolver.js +163 -0
  151. package/dist/src/scenarios-resolver.js.map +1 -0
  152. package/dist/src/server/index.d.ts +2 -0
  153. package/dist/src/server/index.d.ts.map +1 -0
  154. package/dist/src/server/index.js +2 -0
  155. package/dist/src/server/index.js.map +1 -0
  156. package/dist/src/server/server.d.ts +14 -0
  157. package/dist/src/server/server.d.ts.map +1 -0
  158. package/dist/src/server/server.js +68 -0
  159. package/dist/src/server/server.js.map +1 -0
  160. package/dist/src/spec-utils/import-spec.d.ts +6 -0
  161. package/dist/src/spec-utils/import-spec.d.ts.map +1 -0
  162. package/dist/src/spec-utils/import-spec.js +39 -0
  163. package/dist/src/spec-utils/import-spec.js.map +1 -0
  164. package/dist/src/spec-utils/index.d.ts +2 -0
  165. package/dist/src/spec-utils/index.d.ts.map +1 -0
  166. package/dist/src/spec-utils/index.js +2 -0
  167. package/dist/src/spec-utils/index.js.map +1 -0
  168. package/dist/src/utils/body-utils.d.ts +8 -0
  169. package/dist/src/utils/body-utils.d.ts.map +1 -0
  170. package/dist/src/utils/body-utils.js +8 -0
  171. package/dist/src/utils/body-utils.js.map +1 -0
  172. package/dist/src/utils/diagnostic-reporter.d.ts +13 -0
  173. package/dist/src/utils/diagnostic-reporter.d.ts.map +1 -0
  174. package/dist/src/utils/diagnostic-reporter.js +35 -0
  175. package/dist/src/utils/diagnostic-reporter.js.map +1 -0
  176. package/dist/src/utils/exec.d.ts +9 -0
  177. package/dist/src/utils/exec.d.ts.map +1 -0
  178. package/dist/src/utils/exec.js +30 -0
  179. package/dist/src/utils/exec.js.map +1 -0
  180. package/dist/src/utils/file-utils.d.ts +7 -0
  181. package/dist/src/utils/file-utils.d.ts.map +1 -0
  182. package/dist/src/utils/file-utils.js +13 -0
  183. package/dist/src/utils/file-utils.js.map +1 -0
  184. package/dist/src/utils/index.d.ts +6 -0
  185. package/dist/src/utils/index.d.ts.map +1 -0
  186. package/dist/src/utils/index.js +6 -0
  187. package/dist/src/utils/index.js.map +1 -0
  188. package/dist/src/utils/misc-utils.d.ts +8 -0
  189. package/dist/src/utils/misc-utils.d.ts.map +1 -0
  190. package/dist/src/utils/misc-utils.js +47 -0
  191. package/dist/src/utils/misc-utils.js.map +1 -0
  192. package/dist/src/utils/path-utils.d.ts +2 -0
  193. package/dist/src/utils/path-utils.d.ts.map +1 -0
  194. package/dist/src/utils/path-utils.js +4 -0
  195. package/dist/src/utils/path-utils.js.map +1 -0
  196. package/dist/src/utils/request-utils.d.ts +3 -0
  197. package/dist/src/utils/request-utils.d.ts.map +1 -0
  198. package/dist/src/utils/request-utils.js +2 -0
  199. package/dist/src/utils/request-utils.js.map +1 -0
  200. package/generated-defs/TypeSpec.Spector.ts +46 -0
  201. package/generated-defs/TypeSpec.Spector.ts-test.ts +5 -0
  202. package/lib/main.tsp +37 -0
  203. package/package.json +79 -0
  204. package/src/actions/check-coverage.ts +98 -0
  205. package/src/actions/generate-scenario-summary.ts +63 -0
  206. package/src/actions/helper.ts +116 -0
  207. package/src/actions/index.ts +1 -0
  208. package/src/actions/serve.ts +88 -0
  209. package/src/actions/server-test.ts +198 -0
  210. package/src/actions/upload-coverage-report.ts +41 -0
  211. package/src/actions/upload-scenario-manifest.ts +30 -0
  212. package/src/actions/validate-mock-apis.ts +91 -0
  213. package/src/actions/validate-scenarios.ts +32 -0
  214. package/src/app/app.ts +166 -0
  215. package/src/app/config.ts +16 -0
  216. package/src/app/index.ts +2 -0
  217. package/src/app/request-processor.ts +71 -0
  218. package/src/cli/cli.ts +368 -0
  219. package/src/config/config-schema.ts +16 -0
  220. package/src/config/config.ts +15 -0
  221. package/src/config/schema-validator.ts +57 -0
  222. package/src/config/types.ts +3 -0
  223. package/src/constants.ts +3 -0
  224. package/src/coverage/common.ts +10 -0
  225. package/src/coverage/coverage-report.ts +13 -0
  226. package/src/coverage/coverage-tracker.ts +141 -0
  227. package/src/coverage/index.ts +1 -0
  228. package/src/coverage/scenario-manifest.ts +43 -0
  229. package/src/index.ts +1 -0
  230. package/src/lib/decorators.ts +225 -0
  231. package/src/lib/index.ts +18 -0
  232. package/src/lib/lib.ts +33 -0
  233. package/src/lib/tsp-index.ts +12 -0
  234. package/src/lib/validate.ts +55 -0
  235. package/src/logger.ts +10 -0
  236. package/src/routes/admin.ts +15 -0
  237. package/src/routes/index.ts +7 -0
  238. package/src/scenarios-resolver.ts +209 -0
  239. package/src/server/index.ts +1 -0
  240. package/src/server/server.ts +99 -0
  241. package/src/spec-utils/import-spec.ts +49 -0
  242. package/src/spec-utils/index.ts +1 -0
  243. package/src/utils/body-utils.test.ts +18 -0
  244. package/src/utils/body-utils.ts +8 -0
  245. package/src/utils/diagnostic-reporter.ts +49 -0
  246. package/src/utils/exec.ts +36 -0
  247. package/src/utils/file-utils.ts +14 -0
  248. package/src/utils/index.ts +5 -0
  249. package/src/utils/misc-utils.ts +54 -0
  250. package/src/utils/path-utils.ts +3 -0
  251. package/src/utils/request-utils.ts +4 -0
  252. package/temp/.tsbuildinfo +1 -0
  253. package/tsconfig.build.json +13 -0
  254. package/tsconfig.json +4 -0
@@ -0,0 +1,44 @@
1
+ import { MockRequest, ValidationError, } from "@typespec/spec-api";
2
+ import { inspect } from "util";
3
+ import { logger } from "../logger.js";
4
+ export async function processRequest(coverageTracker, scenarioName, scenarioUri, request, response, func) {
5
+ const mockRequest = new MockRequest(request);
6
+ const mockResponse = await callHandler(mockRequest, response, func);
7
+ if (mockResponse === undefined) {
8
+ return;
9
+ }
10
+ await coverageTracker.trackEndpointResponse(scenarioName, scenarioUri, mockResponse);
11
+ processResponse(response, mockResponse);
12
+ }
13
+ const processResponse = (response, mockResponse) => {
14
+ response.status(mockResponse.status);
15
+ if (mockResponse.headers) {
16
+ response.set(mockResponse.headers);
17
+ }
18
+ if (mockResponse.body) {
19
+ response.contentType(mockResponse.body.contentType).send(mockResponse.body.rawContent);
20
+ }
21
+ response.end();
22
+ };
23
+ const callHandler = async (mockRequest, response, func) => {
24
+ try {
25
+ return func(mockRequest);
26
+ }
27
+ catch (e) {
28
+ if (!(e instanceof ValidationError)) {
29
+ throw e;
30
+ }
31
+ logger.warn([
32
+ `Request validation failed: ${e.message}:`,
33
+ ` Expected:\n${inspect(e.expected)}`,
34
+ ` Actual: \n${inspect(e.actual)}`,
35
+ ].join("\n"));
36
+ response
37
+ .status(400)
38
+ .contentType("application/json")
39
+ .send(e.toJSON ? e.toJSON() : JSON.stringify(e.message))
40
+ .end();
41
+ return undefined;
42
+ }
43
+ };
44
+ //# sourceMappingURL=request-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-processor.js","sourceRoot":"","sources":["../../../src/app/request-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIX,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,eAAgC,EAChC,YAAoB,EACpB,WAAmB,EACnB,OAAmB,EACnB,QAAkB,EAClB,IAAwB;IAExB,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,eAAe,CAAC,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACrF,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,QAAkB,EAAE,YAA0B,EAAE,EAAE;IACzE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;QACtB,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzF,CAAC;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EACvB,WAAwB,EACxB,QAAkB,EAClB,IAAwB,EACW,EAAE;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,eAAe,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,CAAC;QACV,CAAC;QAED,MAAM,CAAC,IAAI,CACT;YACE,8BAA8B,CAAC,CAAC,OAAO,GAAG;YAC1C,eAAe,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACpC,cAAc,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,QAAQ;aACL,MAAM,CAAC,GAAG,CAAC;aACX,WAAW,CAAC,kBAAkB,CAAC;aAC/B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aACvD,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import "source-map-support/register.js";
2
+ export declare const DEFAULT_PORT = 3000;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"AACA,OAAO,gCAAgC,CAAC;AAaxC,eAAO,MAAM,YAAY,OAAO,CAAC"}
@@ -0,0 +1,316 @@
1
+ import { join, resolve } from "path";
2
+ import "source-map-support/register.js";
3
+ import yargs from "yargs";
4
+ import { checkCoverage } from "../actions/check-coverage.js";
5
+ import { generateScenarioSummary } from "../actions/generate-scenario-summary.js";
6
+ import { validateScenarios } from "../actions/index.js";
7
+ import { serve, startInBackground, stop } from "../actions/serve.js";
8
+ import { serverTest } from "../actions/server-test.js";
9
+ import { uploadCoverageReport } from "../actions/upload-coverage-report.js";
10
+ import { uploadScenarioManifest } from "../actions/upload-scenario-manifest.js";
11
+ import { validateMockApis } from "../actions/validate-mock-apis.js";
12
+ import { logger } from "../logger.js";
13
+ import { getCommit } from "../utils/misc-utils.js";
14
+ export const DEFAULT_PORT = 3000;
15
+ async function main() {
16
+ await yargs(process.argv.slice(2))
17
+ .scriptName("tsp-spector")
18
+ .strict()
19
+ .help()
20
+ .strict()
21
+ .parserConfiguration({
22
+ "greedy-arrays": false,
23
+ "boolean-negation": false,
24
+ })
25
+ .option("debug", {
26
+ type: "boolean",
27
+ description: "Output debug log messages.",
28
+ default: false,
29
+ })
30
+ .middleware((args) => {
31
+ if (args.debug) {
32
+ logger.level = "debug";
33
+ }
34
+ })
35
+ .command("validate-scenarios <scenariosPaths..>", "Compile and validate all the Spec scenarios.", (cmd) => {
36
+ return cmd.positional("scenariosPaths", {
37
+ description: "Path(s) to the scenarios",
38
+ type: "string",
39
+ array: true,
40
+ demandOption: true,
41
+ });
42
+ }, async (args) => {
43
+ let exitDueToPreviousError = false;
44
+ let hasMoreScenarios = true;
45
+ for (let idx = 0; idx < args.scenariosPaths.length; idx++) {
46
+ logger.info(`Validating scenarios at ${args.scenariosPaths[idx]}`);
47
+ if (idx === args.scenariosPaths.length - 1)
48
+ hasMoreScenarios = false;
49
+ exitDueToPreviousError = await validateScenarios({
50
+ scenariosPath: resolve(process.cwd(), args.scenariosPaths[idx]),
51
+ exitDueToPreviousError,
52
+ hasMoreScenarios,
53
+ });
54
+ }
55
+ })
56
+ .command("generate-scenarios-summary <scenariosPaths..>", "Compile and validate all the Spec scenarios.", (cmd) => {
57
+ return cmd
58
+ .positional("scenariosPaths", {
59
+ description: "Path(s) to the scenarios",
60
+ type: "string",
61
+ array: true,
62
+ demandOption: true,
63
+ })
64
+ .option("outputFile", {
65
+ type: "string",
66
+ description: "Path to the generated summary file(Markdown).",
67
+ default: join(process.cwd(), "spec-summary.md"),
68
+ });
69
+ }, async (args) => {
70
+ let overrideOutputFile = false;
71
+ for (const scenariosPath of args.scenariosPaths) {
72
+ logger.info(`Generating scenarios summary for ${scenariosPath}`);
73
+ await generateScenarioSummary({
74
+ scenariosPath: resolve(process.cwd(), scenariosPath),
75
+ outputFile: resolve(process.cwd(), args.outputFile),
76
+ overrideOutputFile,
77
+ });
78
+ overrideOutputFile = true;
79
+ }
80
+ })
81
+ .command("server", "Server management", (cmd) => {
82
+ cmd
83
+ .command("start <scenariosPath>", "Start the server in the background.", (cmd) => {
84
+ return cmd
85
+ .positional("scenariosPath", {
86
+ description: "Path to the scenarios and mock apis",
87
+ type: "string",
88
+ demandOption: true,
89
+ })
90
+ .option("port", {
91
+ alias: "p",
92
+ type: "number",
93
+ description: "Port where to host the server",
94
+ default: DEFAULT_PORT,
95
+ })
96
+ .option("coverageFile", {
97
+ type: "string",
98
+ description: "Path to the coverage file.",
99
+ default: join(process.cwd(), "spec-coverage.json"),
100
+ });
101
+ }, async (args) => startInBackground({
102
+ scenariosPath: resolve(process.cwd(), args.scenariosPath),
103
+ port: args.port,
104
+ coverageFile: args.coverageFile,
105
+ }))
106
+ .command("stop", "Stop the server running.", (cmd) => {
107
+ return cmd.option("port", {
108
+ alias: "p",
109
+ type: "number",
110
+ description: "Port where to host the server",
111
+ default: DEFAULT_PORT,
112
+ });
113
+ }, async (args) => stop({ port: args.port }));
114
+ })
115
+ .command("serve <scenariosPaths..>", "Serve the mock api at the given paths.", (cmd) => {
116
+ return cmd
117
+ .positional("scenariosPaths", {
118
+ description: "Path(s) to the scenarios and mock apis",
119
+ type: "string",
120
+ array: true,
121
+ demandOption: true,
122
+ })
123
+ .option("port", {
124
+ alias: "p",
125
+ type: "number",
126
+ description: "Port where to host the server",
127
+ default: DEFAULT_PORT,
128
+ })
129
+ .option("coverageFile", {
130
+ type: "string",
131
+ description: "Path to the coverage file.",
132
+ default: join(process.cwd(), "spec-coverage.json"),
133
+ });
134
+ }, async (args) => {
135
+ await serve({
136
+ scenariosPath: args.scenariosPaths,
137
+ port: args.port,
138
+ coverageFile: args.coverageFile,
139
+ });
140
+ })
141
+ .command("server-test <scenariosPaths..>", "Executes the test cases against the service", (cmd) => {
142
+ return cmd
143
+ .positional("scenariosPaths", {
144
+ description: "Path(s) to the scenarios and mock apis",
145
+ type: "string",
146
+ array: true,
147
+ demandOption: true,
148
+ })
149
+ .option("baseUrl", {
150
+ description: "Path to the server",
151
+ type: "string",
152
+ })
153
+ .option("runSingleScenario", {
154
+ description: "Single Scenario Case to run",
155
+ type: "string",
156
+ })
157
+ .option("runScenariosFromFile", {
158
+ description: "File that has the Scenarios to run",
159
+ type: "string",
160
+ })
161
+ .demandOption("scenariosPaths", "serverBasePath");
162
+ }, async (args) => {
163
+ for (const scenariosPath of args.scenariosPaths) {
164
+ logger.info(`Executing server tests for scenarios at ${scenariosPath}`);
165
+ await serverTest(scenariosPath, {
166
+ baseUrl: args.baseUrl,
167
+ runSingleScenario: args.runSingleScenario,
168
+ runScenariosFromFile: args.runScenariosFromFile,
169
+ });
170
+ }
171
+ })
172
+ .command("check-coverage <scenariosPaths..>", "Serve the mock api at the given paths.", (cmd) => {
173
+ return cmd
174
+ .positional("scenariosPaths", {
175
+ description: "Path(s) to the scenarios and mock apis",
176
+ type: "string",
177
+ demandOption: true,
178
+ })
179
+ .option("configFile", {
180
+ type: "string",
181
+ description: "Path to config file for generator.",
182
+ })
183
+ .option("coverageFiles", {
184
+ type: "string",
185
+ array: true,
186
+ description: "Path to the created coverage files.",
187
+ default: [join(process.cwd(), "spec-coverage.json")],
188
+ })
189
+ .demandOption("coverageFiles")
190
+ .option("mergedCoverageFile", {
191
+ type: "string",
192
+ description: "Output Path to the merged coverage file.",
193
+ default: join(process.cwd(), "spec-coverage.json"),
194
+ })
195
+ .option("ignoreNotImplemented", {
196
+ type: "boolean",
197
+ description: "Do not fail if there is some non implemented scenarios.",
198
+ default: false,
199
+ });
200
+ }, async (args) => {
201
+ let exitDueToPreviousError = false;
202
+ let hasMoreScenarios = true;
203
+ for (let idx = 0; idx < args.scenariosPaths.length; idx++) {
204
+ logger.info(`Checking coverage for scenarios at ${args.scenariosPaths[idx]}`);
205
+ if (idx === args.scenariosPaths.length - 1)
206
+ hasMoreScenarios = false;
207
+ exitDueToPreviousError = await checkCoverage({
208
+ scenariosPath: resolve(process.cwd(), args.scenariosPaths[idx]),
209
+ configFile: args.configFile,
210
+ mergedCoverageFile: resolve(process.cwd(), args.mergedCoverageFile),
211
+ coverageFiles: args.coverageFiles.map((x) => resolve(process.cwd(), x)),
212
+ ignoreNotImplemented: args.ignoreNotImplemented,
213
+ exitDueToPreviousError,
214
+ hasMoreScenarios,
215
+ });
216
+ }
217
+ })
218
+ .command("validate-mock-apis <scenariosPaths..>", "Validate mock apis have all the scenarios specified", (cmd) => {
219
+ return cmd.positional("scenariosPaths", {
220
+ description: "Path to the scenarios and mock apis",
221
+ type: "string",
222
+ array: true,
223
+ demandOption: true,
224
+ });
225
+ }, async (args) => {
226
+ let exitDueToPreviousError = false;
227
+ let hasMoreScenarios = true;
228
+ for (let idx = 0; idx < args.scenariosPaths.length; idx++) {
229
+ logger.info(`Validating mock apis for scenarios at ${args.scenariosPaths[idx]}`);
230
+ if (idx === args.scenariosPaths.length - 1)
231
+ hasMoreScenarios = false;
232
+ exitDueToPreviousError = await validateMockApis({
233
+ scenariosPath: resolve(process.cwd(), args.scenariosPaths[idx]),
234
+ exitDueToPreviousError,
235
+ hasMoreScenarios,
236
+ });
237
+ }
238
+ })
239
+ .command("upload-manifest <scenariosPaths..>", "Upload the scenario manifest. DO NOT CALL in generator.", (cmd) => {
240
+ return cmd
241
+ .positional("scenariosPaths", {
242
+ description: "Path to the scenarios and mock apis",
243
+ type: "string",
244
+ array: true,
245
+ demandOption: true,
246
+ })
247
+ .option("storageAccountName", {
248
+ type: "string",
249
+ description: "Name of the storage account",
250
+ })
251
+ .demandOption("storageAccountName");
252
+ }, async (args) => {
253
+ for (const scenariosPath of args.scenariosPaths) {
254
+ logger.info(`Uploading scenario manifest for scenarios at ${scenariosPath}`);
255
+ await uploadScenarioManifest({
256
+ scenariosPath: resolve(process.cwd(), scenariosPath),
257
+ storageAccountName: args.storageAccountName,
258
+ });
259
+ }
260
+ })
261
+ .command("upload-coverage", "Upload the coverage report.", (cmd) => {
262
+ return cmd
263
+ .option("coverageFile", {
264
+ type: "string",
265
+ description: "Path to the coverage file to upload.",
266
+ default: join(process.cwd(), "spec-coverage.json"),
267
+ })
268
+ .demandOption("coverageFile")
269
+ .option("storageAccountName", {
270
+ type: "string",
271
+ description: "Name of the storage account",
272
+ default: join(process.cwd(), "spec-coverage.json"),
273
+ })
274
+ .demandOption("storageAccountName")
275
+ .option("generatorName", {
276
+ type: "string",
277
+ description: "Name of generator",
278
+ })
279
+ .demandOption("generatorName")
280
+ .option("generatorVersion", {
281
+ type: "string",
282
+ description: "Version of generator",
283
+ })
284
+ .demandOption("generatorVersion")
285
+ .option("generatorCommit", {
286
+ type: "string",
287
+ description: "Git sha of the generator. Resolved automatically if command is run inside of repository.",
288
+ })
289
+ .option("generatorMode", {
290
+ type: "string",
291
+ description: "Mode of generator to upload.",
292
+ })
293
+ .demandOption("generatorMode");
294
+ }, async (args) => {
295
+ await uploadCoverageReport({
296
+ coverageFile: resolve(process.cwd(), args.coverageFile),
297
+ storageAccountName: args.storageAccountName,
298
+ generatorName: args.generatorName,
299
+ generatorVersion: args.generatorVersion,
300
+ generatorCommit: args.generatorCommit ?? getCommit(process.cwd()),
301
+ generatorMode: args.generatorMode,
302
+ });
303
+ })
304
+ .demandCommand(1, "You must use one of the supported commands.")
305
+ .parse();
306
+ }
307
+ main().catch((error) => {
308
+ // eslint-disable-next-line no-console
309
+ console.log("Error", error);
310
+ process.exit(1);
311
+ });
312
+ process.once("SIGTERM", () => process.exit(143));
313
+ process.once("SIGINT", () => process.exit(2));
314
+ process.once("SIGUSR1", () => process.exit(2));
315
+ process.once("SIGUSR2", () => process.exit(2));
316
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { JSONSchemaType } from "ajv";
2
+ import { SpecConfig } from "./types.js";
3
+ export declare const SpecConfigJsonSchema: JSONSchemaType<SpecConfig>;
4
+ //# sourceMappingURL=config-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../../src/config/config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,UAAU,CAYlD,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const SpecConfigJsonSchema = {
2
+ type: "object",
3
+ additionalProperties: false,
4
+ properties: {
5
+ unsupportedScenarios: {
6
+ type: "array",
7
+ items: {
8
+ type: "string",
9
+ },
10
+ },
11
+ },
12
+ required: [],
13
+ };
14
+ //# sourceMappingURL=config-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../../src/config/config-schema.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAA+B;IAC9D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,oBAAoB,EAAE;YACpB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;aACf;SACF;KACF;IACD,QAAQ,EAAE,EAAE;CACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Diagnostic } from "../utils/diagnostic-reporter.js";
2
+ import { SpecConfig } from "./types.js";
3
+ export declare function loadSpecConfig(path: string): Promise<[SpecConfig, Diagnostic[]]>;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAKtF"}
@@ -0,0 +1,12 @@
1
+ import { readFile } from "fs/promises";
2
+ import yaml from "js-yaml";
3
+ import { SpecConfigJsonSchema } from "./config-schema.js";
4
+ import { SchemaValidator } from "./schema-validator.js";
5
+ const validator = new SchemaValidator(SpecConfigJsonSchema);
6
+ export async function loadSpecConfig(path) {
7
+ const content = await readFile(path);
8
+ const config = yaml.load(content.toString(), { filename: path });
9
+ const diagnostics = validator.validate(config, path);
10
+ return [config, diagnostics];
11
+ }
12
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { JSONSchemaType } from "ajv";
2
+ import { Diagnostic } from "../utils/diagnostic-reporter.js";
3
+ export interface SchemaValidatorOptions {
4
+ coerceTypes?: boolean;
5
+ }
6
+ export declare class SchemaValidator<T> {
7
+ private schema;
8
+ private ajv;
9
+ constructor(schema: JSONSchemaType<T>, options?: SchemaValidatorOptions);
10
+ /**
11
+ * Validate the config is valid
12
+ * @param config Configuration
13
+ * @param target @optional file for errors tracing.
14
+ * @returns Validation
15
+ */
16
+ validate(config: unknown, target: string): Diagnostic[];
17
+ }
18
+ //# sourceMappingURL=schema-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../../src/config/schema-validator.ts"],"names":[],"mappings":"AAAA,OAAY,EAAe,cAAc,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AACD,qBAAa,eAAe,CAAC,CAAC;IAI1B,OAAO,CAAC,MAAM;IAHhB,OAAO,CAAC,GAAG,CAAM;gBAGP,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,OAAO,GAAE,sBAA2B;IAStC;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;CAY/D"}
@@ -0,0 +1,43 @@
1
+ import Ajv from "ajv";
2
+ export class SchemaValidator {
3
+ schema;
4
+ ajv;
5
+ constructor(schema, options = {}) {
6
+ this.schema = schema;
7
+ // https://github.com/ajv-validator/ajv/issues/2047
8
+ this.ajv = new Ajv({
9
+ strict: true,
10
+ coerceTypes: options.coerceTypes,
11
+ });
12
+ }
13
+ /**
14
+ * Validate the config is valid
15
+ * @param config Configuration
16
+ * @param target @optional file for errors tracing.
17
+ * @returns Validation
18
+ */
19
+ validate(config, target) {
20
+ const validate = this.ajv.compile(this.schema);
21
+ validate(config);
22
+ const diagnostics = [];
23
+ for (const error of validate.errors ?? []) {
24
+ const diagnostic = ajvErrorToDiagnostic(error, target);
25
+ diagnostics.push(diagnostic);
26
+ }
27
+ return diagnostics;
28
+ }
29
+ }
30
+ const IGNORED_AJV_PARAMS = new Set(["type", "errors"]);
31
+ function ajvErrorToDiagnostic(error, target) {
32
+ const messageLines = [`Schema violation: ${error.message} (${error.instancePath || "/"})`];
33
+ for (const [name, value] of Object.entries(error.params).filter(([name]) => !IGNORED_AJV_PARAMS.has(name))) {
34
+ const formattedValue = Array.isArray(value) ? [...new Set(value)].join(", ") : value;
35
+ messageLines.push(` ${name}: ${formattedValue}`);
36
+ }
37
+ const message = messageLines.join("\n");
38
+ return {
39
+ message,
40
+ target,
41
+ };
42
+ }
43
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../../src/config/schema-validator.ts"],"names":[],"mappings":"AAAA,OAAO,GAAoC,MAAM,KAAK,CAAC;AAMvD,MAAM,OAAO,eAAe;IAIhB;IAHF,GAAG,CAAM;IAEjB,YACU,MAAyB,EACjC,UAAkC,EAAE;QAD5B,WAAM,GAAN,MAAM,CAAmB;QAGjC,mDAAmD;QACnD,IAAI,CAAC,GAAG,GAAG,IAAK,GAAW,CAAC;YAC1B,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,MAAe,EAAE,MAAc;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEjB,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEvD,SAAS,oBAAoB,CAAC,KAAkB,EAAE,MAAc;IAC9D,MAAM,YAAY,GAAG,CAAC,qBAAqB,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,YAAY,IAAI,GAAG,GAAG,CAAC,CAAC;IAC3F,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAC7D,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAC1C,EAAE,CAAC;QACF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrF,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,cAAc,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO;QACL,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface SpecConfig {
2
+ unsupportedScenarios: string[];
3
+ }
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export declare const AdminUrls: {
2
+ stop: string;
3
+ };
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;CAErB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const AdminUrls = {
2
+ stop: "/.admin/stop",
3
+ };
4
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,cAAc;CACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ScenariosMetadata } from "@typespec/spec-coverage-sdk";
2
+ export declare function getScenarioMetadata(scenariosPath: string): Promise<ScenariosMetadata>;
3
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/coverage/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAM3F"}
@@ -0,0 +1,9 @@
1
+ import { getPackageJson, getCommit } from "../utils/misc-utils.js";
2
+ export async function getScenarioMetadata(scenariosPath) {
3
+ const pkg = await getPackageJson(scenariosPath);
4
+ return {
5
+ commit: getCommit(scenariosPath),
6
+ version: pkg?.version ?? "?",
7
+ };
8
+ }
9
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/coverage/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,aAAqB;IAC7D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;IAChD,OAAO;QACL,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { CoverageReport, ScenarioStatus } from "@typespec/spec-coverage-sdk";
2
+ export declare function createCoverageReport(scenariosPath: string, results: Record<string, ScenarioStatus>): Promise<CoverageReport>;
3
+ //# sourceMappingURL=coverage-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../../../src/coverage/coverage-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7E,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACtC,OAAO,CAAC,cAAc,CAAC,CAMzB"}
@@ -0,0 +1,9 @@
1
+ import { getScenarioMetadata } from "./common.js";
2
+ export async function createCoverageReport(scenariosPath, results) {
3
+ return {
4
+ scenariosMetadata: await getScenarioMetadata(scenariosPath),
5
+ results,
6
+ createdAt: new Date().toISOString(),
7
+ };
8
+ }
9
+ //# sourceMappingURL=coverage-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-report.js","sourceRoot":"","sources":["../../../src/coverage/coverage-report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAqB,EACrB,OAAuC;IAEvC,OAAO;QACL,iBAAiB,EAAE,MAAM,mBAAmB,CAAC,aAAa,CAAC;QAC3D,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { MockResponse, ScenarioMockApi } from "@typespec/spec-api";
2
+ import { CoverageReport, ScenariosMetadata } from "@typespec/spec-coverage-sdk";
3
+ import { ScenariosAndScenariosMetadata } from "../app/app.js";
4
+ export declare class CoverageTracker {
5
+ private coverageFile;
6
+ private scenarios;
7
+ private scenariosAndScenariosMetaData;
8
+ private hits;
9
+ constructor(coverageFile: string);
10
+ setScenarios(scenariosMetadata: ScenariosMetadata, scenarios: Record<string, ScenarioMockApi>): void;
11
+ setScenarios(scenariosAndScenariosMetaData: ScenariosAndScenariosMetadata[]): void;
12
+ trackEndpointResponse(scenarioName: string, endpoint: string, response: MockResponse): Promise<void>;
13
+ computeCoverage(): CoverageReport[];
14
+ private saveCoverageSync;
15
+ private computeScenarioStatus;
16
+ }
17
+ //# sourceMappingURL=coverage-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-tracker.d.ts","sourceRoot":"","sources":["../../../src/coverage/coverage-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,YAAY,EAA+C,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzI,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AAEhG,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAE9D,qBAAa,eAAe;IAKP,OAAO,CAAC,YAAY;IAJvC,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,6BAA6B,CAAuC;IAC5E,OAAO,CAAC,IAAI,CAAkD;gBAEnC,YAAY,EAAE,MAAM;IAQxC,YAAY,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI;IACpG,YAAY,CAAC,6BAA6B,EAAE,6BAA6B,EAAE,GAAG,IAAI;IAkB5E,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY;IAe1F,eAAe,IAAI,cAAc,EAAE;IAgB1C,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,qBAAqB;CAyD9B"}