@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @typespec/spector
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE
|
package/cmd/cli.mjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DecoratorContext, Interface, Model, Namespace, Operation, Type } from "@typespec/compiler";
|
|
2
|
+
/**
|
|
3
|
+
* Setup the boilerplate for a scenario service(server endpoint, etc.)
|
|
4
|
+
*/
|
|
5
|
+
export type ScenarioServiceDecorator = (context: DecoratorContext, target: Namespace, route: string, options?: Type) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Mark an operation, interface or namespace as a scenario. All containing operations will be part of the same scenario.
|
|
8
|
+
*/
|
|
9
|
+
export type ScenarioDecorator = (context: DecoratorContext, target: Namespace | Interface | Operation, name?: string) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Specify documentation on how to implement this scenario.
|
|
12
|
+
*
|
|
13
|
+
* @param doc Documentation
|
|
14
|
+
* @param formatArgs Format arguments
|
|
15
|
+
*/
|
|
16
|
+
export type ScenarioDocDecorator = (context: DecoratorContext, target: Namespace | Interface | Operation, doc: string, formatArgs?: Model) => void;
|
|
17
|
+
export type TypeSpecSpectorDecorators = {
|
|
18
|
+
scenarioService: ScenarioServiceDecorator;
|
|
19
|
+
scenario: ScenarioDecorator;
|
|
20
|
+
scenarioDoc: ScenarioDocDecorator;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=TypeSpec.Spector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSpec.Spector.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.Spector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,EACL,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,IAAI,KACX,IAAI,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACzC,IAAI,CAAC,EAAE,MAAM,KACV,IAAI,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACzC,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,KAAK,KACf,IAAI,CAAC;AAEV,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSpec.Spector.js","sourceRoot":"","sources":["../../generated-defs/TypeSpec.Spector.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSpec.Spector.ts-test.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.Spector.ts-test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** An error here would mean that the decorator is not exported or doesn't have the right name. */
|
|
2
|
+
import { $decorators } from "@typespec/spector";
|
|
3
|
+
/** An error here would mean that the exported decorator is not using the same signature. Make sure to have export const $decName: DecNameDecorator = (...) => ... */
|
|
4
|
+
const _ = $decorators["TypeSpec.Spector"];
|
|
5
|
+
//# sourceMappingURL=TypeSpec.Spector.ts-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSpec.Spector.ts-test.js","sourceRoot":"","sources":["../../generated-defs/TypeSpec.Spector.ts-test.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qKAAqK;AACrK,MAAM,CAAC,GAA8B,WAAW,CAAC,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface CheckCoverageConfig {
|
|
2
|
+
scenariosPath: string;
|
|
3
|
+
configFile?: string;
|
|
4
|
+
coverageFiles: string[];
|
|
5
|
+
mergedCoverageFile: string;
|
|
6
|
+
ignoreNotImplemented?: boolean;
|
|
7
|
+
exitDueToPreviousError?: boolean;
|
|
8
|
+
hasMoreScenarios?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function checkCoverage(config: CheckCoverageConfig): Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=check-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-coverage.d.ts","sourceRoot":"","sources":["../../../src/actions/check-coverage.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgFjF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { readFile, writeFile } from "fs/promises";
|
|
2
|
+
import { loadSpecConfig } from "../config/config.js";
|
|
3
|
+
import { createCoverageReport } from "../coverage/coverage-report.js";
|
|
4
|
+
import { loadScenarioMockApis } from "../scenarios-resolver.js";
|
|
5
|
+
import { createDiagnosticReporter, findFilesFromPattern } from "../utils/index.js";
|
|
6
|
+
export async function checkCoverage(config) {
|
|
7
|
+
const inputCoverageFiles = (await Promise.all(config.coverageFiles.map((x) => findFilesFromPattern(x)))).flat();
|
|
8
|
+
const results = {};
|
|
9
|
+
const diagnosticsReporter = createDiagnosticReporter();
|
|
10
|
+
const scenarios = await loadScenarioMockApis(config.scenariosPath);
|
|
11
|
+
for (const scenarioName of Object.keys(scenarios)) {
|
|
12
|
+
results[scenarioName] = "not-implemented";
|
|
13
|
+
}
|
|
14
|
+
if (config.configFile) {
|
|
15
|
+
const [specConfig, diagnostics] = await loadSpecConfig(config.configFile);
|
|
16
|
+
diagnosticsReporter.reportDiagnostics(diagnostics);
|
|
17
|
+
for (const scenarioName of specConfig.unsupportedScenarios) {
|
|
18
|
+
results[scenarioName] = "not-supported";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
for (const coverageFile of inputCoverageFiles) {
|
|
22
|
+
const content = await readFile(coverageFile);
|
|
23
|
+
const inputCoverage = JSON.parse(content.toString());
|
|
24
|
+
for (const [scenarioName, scenarioStatus] of Object.entries(inputCoverage.results)) {
|
|
25
|
+
const existing = results[scenarioName];
|
|
26
|
+
if (existing === undefined) {
|
|
27
|
+
diagnosticsReporter.reportDiagnostic({
|
|
28
|
+
message: `Scenario ${scenarioName} with coverage in file "${coverageFile}" is not defined in the scenarios in path "${config.scenariosPath}".`,
|
|
29
|
+
});
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
switch (scenarioStatus) {
|
|
33
|
+
case "fail":
|
|
34
|
+
results[scenarioName] = "fail";
|
|
35
|
+
diagnosticsReporter.reportDiagnostic({
|
|
36
|
+
message: `Scenario ${scenarioName} failed in "${coverageFile}".`,
|
|
37
|
+
});
|
|
38
|
+
break;
|
|
39
|
+
case "pass":
|
|
40
|
+
case "not-applicable":
|
|
41
|
+
case "not-supported":
|
|
42
|
+
if (existing === "not-implemented") {
|
|
43
|
+
results[scenarioName] = scenarioStatus;
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
case "not-implemented":
|
|
47
|
+
// nothing
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (!config.ignoreNotImplemented) {
|
|
52
|
+
for (const [scenarioName, scenarioStatus] of Object.entries(results)) {
|
|
53
|
+
if (scenarioStatus === "not-implemented") {
|
|
54
|
+
diagnosticsReporter.reportDiagnostic({
|
|
55
|
+
message: `Scenario ${scenarioName} is not implemented.`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const coverageReport = createCoverageReport(config.scenariosPath, results);
|
|
61
|
+
await writeFile(config.mergedCoverageFile, JSON.stringify(coverageReport, null, 2));
|
|
62
|
+
if (diagnosticsReporter.diagnostics.length === 0) {
|
|
63
|
+
if (config.exitDueToPreviousError) {
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (config.hasMoreScenarios) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=check-coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-coverage.js","sourceRoot":"","sources":["../../../src/actions/check-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Scenario } from "../lib/decorators.js";
|
|
2
|
+
export interface GenerateScenarioSummaryConfig {
|
|
3
|
+
scenariosPath: string;
|
|
4
|
+
outputFile: string;
|
|
5
|
+
overrideOutputFile?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function generateScenarioSummary({ scenariosPath, outputFile, overrideOutputFile, }: GenerateScenarioSummaryConfig): Promise<void>;
|
|
8
|
+
export declare function createScenarioSummary(scenarios: Scenario[]): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=generate-scenario-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-scenario-summary.d.ts","sourceRoot":"","sources":["../../../src/actions/generate-scenario-summary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,sBAAsB,CAAC;AAIvE,MAAM,WAAW,6BAA6B;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,uBAAuB,CAAC,EAC5C,aAAa,EACb,UAAU,EACV,kBAAkB,GACnB,EAAE,6BAA6B,iBAgB/B;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB5E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { readFile, writeFile } from "fs/promises";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import prettier from "prettier";
|
|
4
|
+
import { logger } from "../logger.js";
|
|
5
|
+
import { loadScenarios } from "../scenarios-resolver.js";
|
|
6
|
+
export async function generateScenarioSummary({ scenariosPath, outputFile, overrideOutputFile, }) {
|
|
7
|
+
const [scenarios, diagnostics] = await loadScenarios(scenariosPath);
|
|
8
|
+
if (diagnostics.length > 0) {
|
|
9
|
+
process.exit(-1);
|
|
10
|
+
}
|
|
11
|
+
let summary = await createScenarioSummary(scenarios);
|
|
12
|
+
if (overrideOutputFile) {
|
|
13
|
+
const existingContent = await readFile(outputFile, "utf-8");
|
|
14
|
+
summary = summary.replace(/# Spec Project summary/, "");
|
|
15
|
+
await writeFile(outputFile, `${existingContent}\n${summary}`);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
await writeFile(outputFile, summary);
|
|
19
|
+
}
|
|
20
|
+
logger.info(`${pc.green("✓")} Scenario summary generated at ${outputFile}.`);
|
|
21
|
+
}
|
|
22
|
+
export function createScenarioSummary(scenarios) {
|
|
23
|
+
const lines = [`# Spec Project summary`];
|
|
24
|
+
for (const scenario of scenarios.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
25
|
+
lines.push(`### ${scenario.name}`);
|
|
26
|
+
lines.push("");
|
|
27
|
+
const endpoints = renderEndpoints(scenario.endpoints);
|
|
28
|
+
if (endpoints) {
|
|
29
|
+
lines.push(...endpoints);
|
|
30
|
+
}
|
|
31
|
+
lines.push("");
|
|
32
|
+
lines.push(`${scenario.scenarioDoc}`);
|
|
33
|
+
lines.push("");
|
|
34
|
+
}
|
|
35
|
+
const markdown = lines.join("\n");
|
|
36
|
+
return prettier.format(markdown, { parser: "markdown" });
|
|
37
|
+
}
|
|
38
|
+
function renderEndpoints(endpoints) {
|
|
39
|
+
if (endpoints.length === 0) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
else if (endpoints.length === 1) {
|
|
43
|
+
return [`- Endpoint: \`${endpoints[0].verb} ${endpoints[0].path}\``];
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return [`- Endpoints:`, ...endpoints.map((x) => ` - \`${endpoints[0].verb} ${x.path}\``)];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=generate-scenario-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-scenario-summary.js","sourceRoot":"","sources":["../../../src/actions/generate-scenario-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQzD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,EAC5C,aAAa,EACb,UAAU,EACV,kBAAkB,GACY;IAC9B,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;IAEpE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,eAAe,KAAK,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,UAAU,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAqB;IACzD,MAAM,KAAK,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEzC,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,SAA6B;IACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,iBAAiB,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HttpMethod, ServiceRequestFile } from "@typespec/spec-api";
|
|
2
|
+
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
3
|
+
export interface ServiceRequest {
|
|
4
|
+
endPoint: string;
|
|
5
|
+
options?: {
|
|
6
|
+
requestBody?: any;
|
|
7
|
+
files?: ServiceRequestFile[];
|
|
8
|
+
config?: AxiosRequestConfig<any> | undefined;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare function makeServiceCall(serviceCallType: HttpMethod, request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
12
|
+
export declare function makePutCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
13
|
+
export declare function makePostCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
14
|
+
export declare function makeGetCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
15
|
+
export declare function makePatchCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
16
|
+
export declare function makeDeleteCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
17
|
+
export declare function makeHeadCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
18
|
+
type EncodingType = "utf-8" | "base64" | "base64url" | "hex";
|
|
19
|
+
export declare function uint8ArrayToString(bytes: Uint8Array, format: EncodingType): string;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/actions/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,GAAG,CAAC;QAClB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;KAC9C,CAAC;CACH;AAmCD,wBAAsB,eAAe,CACnC,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAmBlC;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAO3F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAO5F;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAG3F;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAO7F;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAG9F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAG5F;AAED,KAAK,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;AAC7D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAElF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import FormData from "form-data";
|
|
3
|
+
function checkAndAddFormDataIfRequired(request) {
|
|
4
|
+
if (request.options?.config?.headers?.["Content-Type"] === "multipart/form-data") {
|
|
5
|
+
const formData = new FormData();
|
|
6
|
+
if (request.options?.requestBody) {
|
|
7
|
+
for (const key in request.options.requestBody) {
|
|
8
|
+
formData.append(key, JSON.stringify(request.options.requestBody[key]));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
if (request.options.files) {
|
|
12
|
+
request.options.files.forEach((file) => {
|
|
13
|
+
formData.append(`${file.fieldname}`, file.buffer, {
|
|
14
|
+
filename: file.originalname,
|
|
15
|
+
contentType: file.mimetype,
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
request.options.requestBody = formData;
|
|
20
|
+
request.options.config = {
|
|
21
|
+
...request.options.config,
|
|
22
|
+
headers: formData.getHeaders(),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function checkAndUpdateEndpoint(request) {
|
|
27
|
+
if (request.options?.config?.params) {
|
|
28
|
+
for (const key in request.options.config.params) {
|
|
29
|
+
request.endPoint = request.endPoint.replace(`:${key}`, request.options.config.params[key]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
request.endPoint = request.endPoint.replace(/\[:\]/g, ":");
|
|
33
|
+
}
|
|
34
|
+
export async function makeServiceCall(serviceCallType, request) {
|
|
35
|
+
checkAndUpdateEndpoint(request);
|
|
36
|
+
checkAndAddFormDataIfRequired(request);
|
|
37
|
+
if (serviceCallType === "put") {
|
|
38
|
+
return await makePutCall(request);
|
|
39
|
+
}
|
|
40
|
+
if (serviceCallType === "post") {
|
|
41
|
+
return await makePostCall(request);
|
|
42
|
+
}
|
|
43
|
+
if (serviceCallType === "get") {
|
|
44
|
+
return await makeGetCall(request);
|
|
45
|
+
}
|
|
46
|
+
if (serviceCallType === "delete") {
|
|
47
|
+
return await makeDeleteCall(request);
|
|
48
|
+
}
|
|
49
|
+
if (serviceCallType === "head") {
|
|
50
|
+
return await makeHeadCall(request);
|
|
51
|
+
}
|
|
52
|
+
return await makePatchCall(request);
|
|
53
|
+
}
|
|
54
|
+
export async function makePutCall(request) {
|
|
55
|
+
const response = await axios.put(request.endPoint, request.options?.requestBody, request.options?.config);
|
|
56
|
+
return response;
|
|
57
|
+
}
|
|
58
|
+
export async function makePostCall(request) {
|
|
59
|
+
const response = await axios.post(request.endPoint, request.options?.requestBody, request.options?.config);
|
|
60
|
+
return response;
|
|
61
|
+
}
|
|
62
|
+
export async function makeGetCall(request) {
|
|
63
|
+
const response = await axios.get(request.endPoint, request.options?.config);
|
|
64
|
+
return response;
|
|
65
|
+
}
|
|
66
|
+
export async function makePatchCall(request) {
|
|
67
|
+
const response = await axios.patch(request.endPoint, request.options?.requestBody, request.options?.config);
|
|
68
|
+
return response;
|
|
69
|
+
}
|
|
70
|
+
export async function makeDeleteCall(request) {
|
|
71
|
+
const response = await axios.delete(request.endPoint, request.options?.config);
|
|
72
|
+
return response;
|
|
73
|
+
}
|
|
74
|
+
export async function makeHeadCall(request) {
|
|
75
|
+
const response = await axios.head(request.endPoint, request.options?.config);
|
|
76
|
+
return response;
|
|
77
|
+
}
|
|
78
|
+
export function uint8ArrayToString(bytes, format) {
|
|
79
|
+
return Buffer.from(bytes).toString(format);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/actions/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ServeConfig {
|
|
2
|
+
scenariosPath: string | string[];
|
|
3
|
+
coverageFile: string;
|
|
4
|
+
port: number;
|
|
5
|
+
}
|
|
6
|
+
export interface StopConfig {
|
|
7
|
+
port: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function serve(config: ServeConfig): Promise<void>;
|
|
10
|
+
export declare function startInBackground(config: ServeConfig): Promise<void>;
|
|
11
|
+
export declare function stop(config: StopConfig): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/actions/serve.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,WAAW,iBAgB9C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,iBAmC1D;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,UAAU,iBAc5C"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import fetch from "node-fetch";
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
import { MockApiApp } from "../app/app.js";
|
|
5
|
+
import { AdminUrls } from "../constants.js";
|
|
6
|
+
import { logger } from "../logger.js";
|
|
7
|
+
import { ensureScenariosPathExists } from "../utils/index.js";
|
|
8
|
+
export async function serve(config) {
|
|
9
|
+
if (Array.isArray(config.scenariosPath)) {
|
|
10
|
+
for (let idx = 0; idx < config.scenariosPath.length; idx++) {
|
|
11
|
+
config.scenariosPath[idx] = resolve(process.cwd(), config.scenariosPath[idx]);
|
|
12
|
+
await ensureScenariosPathExists(config.scenariosPath[idx]);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
await ensureScenariosPathExists(config.scenariosPath);
|
|
17
|
+
}
|
|
18
|
+
const server = new MockApiApp({
|
|
19
|
+
port: config.port,
|
|
20
|
+
scenarioPath: config.scenariosPath,
|
|
21
|
+
coverageFile: config.coverageFile,
|
|
22
|
+
});
|
|
23
|
+
await server.start();
|
|
24
|
+
}
|
|
25
|
+
export async function startInBackground(config) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
const [nodeExe, entrypoint] = process.argv;
|
|
28
|
+
logger.info(`Starting server in background at port ${config.port}`);
|
|
29
|
+
const scenariosPath = Array.isArray(config.scenariosPath)
|
|
30
|
+
? config.scenariosPath.join(" ")
|
|
31
|
+
: config.scenariosPath;
|
|
32
|
+
const cp = spawn(nodeExe, [
|
|
33
|
+
entrypoint,
|
|
34
|
+
"serve",
|
|
35
|
+
scenariosPath,
|
|
36
|
+
"--port",
|
|
37
|
+
config.port.toString(),
|
|
38
|
+
"--coverageFile",
|
|
39
|
+
config.coverageFile,
|
|
40
|
+
], {
|
|
41
|
+
detached: true,
|
|
42
|
+
stdio: "ignore",
|
|
43
|
+
});
|
|
44
|
+
const exitListener = (exitCode) => {
|
|
45
|
+
logger.error(`Server exited within 1s with exit code ${exitCode}`);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
};
|
|
48
|
+
cp.on("exit", exitListener);
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
cp.removeListener("exit", exitListener);
|
|
51
|
+
logger.info(`Stated server with pid: ${cp.pid}`);
|
|
52
|
+
cp.unref();
|
|
53
|
+
resolve();
|
|
54
|
+
}, 1000);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export async function stop(config) {
|
|
58
|
+
try {
|
|
59
|
+
await fetch(`http://localhost:${config.port}${AdminUrls.stop}`, {
|
|
60
|
+
method: "post",
|
|
61
|
+
});
|
|
62
|
+
logger.info(`Stopped server running at port ${config.port}.`);
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
if (e.code === "ECONNREFUSED") {
|
|
66
|
+
logger.info(`No server running at port ${config.port}.`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/actions/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ServerTestOptions {
|
|
2
|
+
baseUrl?: string;
|
|
3
|
+
runSingleScenario?: string;
|
|
4
|
+
runScenariosFromFile?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function serverTest(scenariosPath: string, options?: ServerTestOptions): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=server-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-test.d.ts","sourceRoot":"","sources":["../../../src/actions/server-test.ts"],"names":[],"mappings":"AA+IA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAuBD,wBAAsB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,iBA2BtF"}
|