@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.
- package/CHANGELOG.md +1 -0
- package/LICENSE +21 -0
- package/cmd/cli.mjs +3 -0
- package/dist/generated-defs/TypeSpec.Spector.d.ts +22 -0
- package/dist/generated-defs/TypeSpec.Spector.d.ts.map +1 -0
- package/dist/generated-defs/TypeSpec.Spector.js +2 -0
- package/dist/generated-defs/TypeSpec.Spector.js.map +1 -0
- package/dist/generated-defs/TypeSpec.Spector.ts-test.d.ts +2 -0
- package/dist/generated-defs/TypeSpec.Spector.ts-test.d.ts.map +1 -0
- package/dist/generated-defs/TypeSpec.Spector.ts-test.js +5 -0
- package/dist/generated-defs/TypeSpec.Spector.ts-test.js.map +1 -0
- package/dist/src/actions/check-coverage.d.ts +11 -0
- package/dist/src/actions/check-coverage.d.ts.map +1 -0
- package/dist/src/actions/check-coverage.js +77 -0
- package/dist/src/actions/check-coverage.js.map +1 -0
- package/dist/src/actions/generate-scenario-summary.d.ts +9 -0
- package/dist/src/actions/generate-scenario-summary.d.ts.map +1 -0
- package/dist/src/actions/generate-scenario-summary.js +49 -0
- package/dist/src/actions/generate-scenario-summary.js.map +1 -0
- package/dist/src/actions/helper.d.ts +21 -0
- package/dist/src/actions/helper.d.ts.map +1 -0
- package/dist/src/actions/helper.js +81 -0
- package/dist/src/actions/helper.js.map +1 -0
- package/dist/src/actions/index.d.ts +2 -0
- package/dist/src/actions/index.d.ts.map +1 -0
- package/dist/src/actions/index.js +2 -0
- package/dist/src/actions/index.js.map +1 -0
- package/dist/src/actions/serve.d.ts +12 -0
- package/dist/src/actions/serve.d.ts.map +1 -0
- package/dist/src/actions/serve.js +73 -0
- package/dist/src/actions/serve.js.map +1 -0
- package/dist/src/actions/server-test.d.ts +7 -0
- package/dist/src/actions/server-test.d.ts.map +1 -0
- package/dist/src/actions/server-test.js +165 -0
- package/dist/src/actions/server-test.js.map +1 -0
- package/dist/src/actions/upload-coverage-report.d.ts +10 -0
- package/dist/src/actions/upload-coverage-report.d.ts.map +1 -0
- package/dist/src/actions/upload-coverage-report.js +19 -0
- package/dist/src/actions/upload-coverage-report.js.map +1 -0
- package/dist/src/actions/upload-scenario-manifest.d.ts +6 -0
- package/dist/src/actions/upload-scenario-manifest.d.ts.map +1 -0
- package/dist/src/actions/upload-scenario-manifest.js +18 -0
- package/dist/src/actions/upload-scenario-manifest.js.map +1 -0
- package/dist/src/actions/validate-mock-apis.d.ts +7 -0
- package/dist/src/actions/validate-mock-apis.d.ts.map +1 -0
- package/dist/src/actions/validate-mock-apis.js +71 -0
- package/dist/src/actions/validate-mock-apis.js.map +1 -0
- package/dist/src/actions/validate-scenarios.d.ts +7 -0
- package/dist/src/actions/validate-scenarios.d.ts.map +1 -0
- package/dist/src/actions/validate-scenarios.js +25 -0
- package/dist/src/actions/validate-scenarios.js.map +1 -0
- package/dist/src/app/app.d.ts +17 -0
- package/dist/src/app/app.d.ts.map +1 -0
- package/dist/src/app/app.js +134 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/config.d.ts +15 -0
- package/dist/src/app/config.d.ts.map +1 -0
- package/dist/src/app/config.js +2 -0
- package/dist/src/app/config.js.map +1 -0
- package/dist/src/app/index.d.ts +3 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/index.js +3 -0
- package/dist/src/app/index.js.map +1 -0
- package/dist/src/app/request-processor.d.ts +5 -0
- package/dist/src/app/request-processor.d.ts.map +1 -0
- package/dist/src/app/request-processor.js +44 -0
- package/dist/src/app/request-processor.js.map +1 -0
- package/dist/src/cli/cli.d.ts +3 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +316 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/config/config-schema.d.ts +4 -0
- package/dist/src/config/config-schema.d.ts.map +1 -0
- package/dist/src/config/config-schema.js +14 -0
- package/dist/src/config/config-schema.js.map +1 -0
- package/dist/src/config/config.d.ts +4 -0
- package/dist/src/config/config.d.ts.map +1 -0
- package/dist/src/config/config.js +12 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/schema-validator.d.ts +18 -0
- package/dist/src/config/schema-validator.d.ts.map +1 -0
- package/dist/src/config/schema-validator.js +43 -0
- package/dist/src/config/schema-validator.js.map +1 -0
- package/dist/src/config/types.d.ts +4 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +2 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/constants.d.ts +4 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +4 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/coverage/common.d.ts +3 -0
- package/dist/src/coverage/common.d.ts.map +1 -0
- package/dist/src/coverage/common.js +9 -0
- package/dist/src/coverage/common.js.map +1 -0
- package/dist/src/coverage/coverage-report.d.ts +3 -0
- package/dist/src/coverage/coverage-report.d.ts.map +1 -0
- package/dist/src/coverage/coverage-report.js +9 -0
- package/dist/src/coverage/coverage-report.js.map +1 -0
- package/dist/src/coverage/coverage-tracker.d.ts +17 -0
- package/dist/src/coverage/coverage-tracker.d.ts.map +1 -0
- package/dist/src/coverage/coverage-tracker.js +125 -0
- package/dist/src/coverage/coverage-tracker.js.map +1 -0
- package/dist/src/coverage/index.d.ts +2 -0
- package/dist/src/coverage/index.d.ts.map +1 -0
- package/dist/src/coverage/index.js +2 -0
- package/dist/src/coverage/index.js.map +1 -0
- package/dist/src/coverage/scenario-manifest.d.ts +6 -0
- package/dist/src/coverage/scenario-manifest.d.ts.map +1 -0
- package/dist/src/coverage/scenario-manifest.js +32 -0
- package/dist/src/coverage/scenario-manifest.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/decorators.d.ts +24 -0
- package/dist/src/lib/decorators.d.ts.map +1 -0
- package/dist/src/lib/decorators.js +158 -0
- package/dist/src/lib/decorators.js.map +1 -0
- package/dist/src/lib/index.d.ts +4 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +6 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/lib.d.ts +33 -0
- package/dist/src/lib/lib.d.ts.map +1 -0
- package/dist/src/lib/lib.js +31 -0
- package/dist/src/lib/lib.js.map +1 -0
- package/dist/src/lib/tsp-index.d.ts +2 -0
- package/dist/src/lib/tsp-index.d.ts.map +1 -0
- package/dist/src/lib/tsp-index.js +11 -0
- package/dist/src/lib/tsp-index.js.map +1 -0
- package/dist/src/lib/validate.d.ts +3 -0
- package/dist/src/lib/validate.d.ts.map +1 -0
- package/dist/src/lib/validate.js +41 -0
- package/dist/src/lib/validate.js.map +1 -0
- package/dist/src/logger.d.ts +3 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +10 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/routes/admin.d.ts +3 -0
- package/dist/src/routes/admin.d.ts.map +1 -0
- package/dist/src/routes/admin.js +13 -0
- package/dist/src/routes/admin.js.map +1 -0
- package/dist/src/routes/index.d.ts +3 -0
- package/dist/src/routes/index.d.ts.map +1 -0
- package/dist/src/routes/index.js +6 -0
- package/dist/src/routes/index.js.map +1 -0
- package/dist/src/scenarios-resolver.d.ts +17 -0
- package/dist/src/scenarios-resolver.d.ts.map +1 -0
- package/dist/src/scenarios-resolver.js +163 -0
- package/dist/src/scenarios-resolver.js.map +1 -0
- package/dist/src/server/index.d.ts +2 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +2 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/server.d.ts +14 -0
- package/dist/src/server/server.d.ts.map +1 -0
- package/dist/src/server/server.js +68 -0
- package/dist/src/server/server.js.map +1 -0
- package/dist/src/spec-utils/import-spec.d.ts +6 -0
- package/dist/src/spec-utils/import-spec.d.ts.map +1 -0
- package/dist/src/spec-utils/import-spec.js +39 -0
- package/dist/src/spec-utils/import-spec.js.map +1 -0
- package/dist/src/spec-utils/index.d.ts +2 -0
- package/dist/src/spec-utils/index.d.ts.map +1 -0
- package/dist/src/spec-utils/index.js +2 -0
- package/dist/src/spec-utils/index.js.map +1 -0
- package/dist/src/utils/body-utils.d.ts +8 -0
- package/dist/src/utils/body-utils.d.ts.map +1 -0
- package/dist/src/utils/body-utils.js +8 -0
- package/dist/src/utils/body-utils.js.map +1 -0
- package/dist/src/utils/diagnostic-reporter.d.ts +13 -0
- package/dist/src/utils/diagnostic-reporter.d.ts.map +1 -0
- package/dist/src/utils/diagnostic-reporter.js +35 -0
- package/dist/src/utils/diagnostic-reporter.js.map +1 -0
- package/dist/src/utils/exec.d.ts +9 -0
- package/dist/src/utils/exec.d.ts.map +1 -0
- package/dist/src/utils/exec.js +30 -0
- package/dist/src/utils/exec.js.map +1 -0
- package/dist/src/utils/file-utils.d.ts +7 -0
- package/dist/src/utils/file-utils.d.ts.map +1 -0
- package/dist/src/utils/file-utils.js +13 -0
- package/dist/src/utils/file-utils.js.map +1 -0
- package/dist/src/utils/index.d.ts +6 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +6 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/misc-utils.d.ts +8 -0
- package/dist/src/utils/misc-utils.d.ts.map +1 -0
- package/dist/src/utils/misc-utils.js +47 -0
- package/dist/src/utils/misc-utils.js.map +1 -0
- package/dist/src/utils/path-utils.d.ts +2 -0
- package/dist/src/utils/path-utils.d.ts.map +1 -0
- package/dist/src/utils/path-utils.js +4 -0
- package/dist/src/utils/path-utils.js.map +1 -0
- package/dist/src/utils/request-utils.d.ts +3 -0
- package/dist/src/utils/request-utils.d.ts.map +1 -0
- package/dist/src/utils/request-utils.js +2 -0
- package/dist/src/utils/request-utils.js.map +1 -0
- package/generated-defs/TypeSpec.Spector.ts +46 -0
- package/generated-defs/TypeSpec.Spector.ts-test.ts +5 -0
- package/lib/main.tsp +37 -0
- package/package.json +79 -0
- package/src/actions/check-coverage.ts +98 -0
- package/src/actions/generate-scenario-summary.ts +63 -0
- package/src/actions/helper.ts +116 -0
- package/src/actions/index.ts +1 -0
- package/src/actions/serve.ts +88 -0
- package/src/actions/server-test.ts +198 -0
- package/src/actions/upload-coverage-report.ts +41 -0
- package/src/actions/upload-scenario-manifest.ts +30 -0
- package/src/actions/validate-mock-apis.ts +91 -0
- package/src/actions/validate-scenarios.ts +32 -0
- package/src/app/app.ts +166 -0
- package/src/app/config.ts +16 -0
- package/src/app/index.ts +2 -0
- package/src/app/request-processor.ts +71 -0
- package/src/cli/cli.ts +368 -0
- package/src/config/config-schema.ts +16 -0
- package/src/config/config.ts +15 -0
- package/src/config/schema-validator.ts +57 -0
- package/src/config/types.ts +3 -0
- package/src/constants.ts +3 -0
- package/src/coverage/common.ts +10 -0
- package/src/coverage/coverage-report.ts +13 -0
- package/src/coverage/coverage-tracker.ts +141 -0
- package/src/coverage/index.ts +1 -0
- package/src/coverage/scenario-manifest.ts +43 -0
- package/src/index.ts +1 -0
- package/src/lib/decorators.ts +225 -0
- package/src/lib/index.ts +18 -0
- package/src/lib/lib.ts +33 -0
- package/src/lib/tsp-index.ts +12 -0
- package/src/lib/validate.ts +55 -0
- package/src/logger.ts +10 -0
- package/src/routes/admin.ts +15 -0
- package/src/routes/index.ts +7 -0
- package/src/scenarios-resolver.ts +209 -0
- package/src/server/index.ts +1 -0
- package/src/server/server.ts +99 -0
- package/src/spec-utils/import-spec.ts +49 -0
- package/src/spec-utils/index.ts +1 -0
- package/src/utils/body-utils.test.ts +18 -0
- package/src/utils/body-utils.ts +8 -0
- package/src/utils/diagnostic-reporter.ts +49 -0
- package/src/utils/exec.ts +36 -0
- package/src/utils/file-utils.ts +14 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/misc-utils.ts +54 -0
- package/src/utils/path-utils.ts +3 -0
- package/src/utils/request-utils.ts +4 -0
- package/temp/.tsbuildinfo +1 -0
- package/tsconfig.build.json +13 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|