spec-box-tms-sync 0.3.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 (103) hide show
  1. package/README.md +284 -0
  2. package/bin/spec-box +8 -0
  3. package/dist/api/index.d.ts +3 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +8 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/models/index.d.ts +187 -0
  8. package/dist/api/models/index.d.ts.map +1 -0
  9. package/dist/api/models/index.js +3 -0
  10. package/dist/api/models/index.js.map +1 -0
  11. package/dist/api/models/mappers.d.ts +24 -0
  12. package/dist/api/models/mappers.d.ts.map +1 -0
  13. package/dist/api/models/mappers.js +850 -0
  14. package/dist/api/models/mappers.js.map +1 -0
  15. package/dist/api/models/parameters.d.ts +14 -0
  16. package/dist/api/models/parameters.d.ts.map +1 -0
  17. package/dist/api/models/parameters.js +112 -0
  18. package/dist/api/models/parameters.js.map +1 -0
  19. package/dist/api/specBoxWebApi.d.ts +47 -0
  20. package/dist/api/specBoxWebApi.d.ts.map +1 -0
  21. package/dist/api/specBoxWebApi.js +242 -0
  22. package/dist/api/specBoxWebApi.js.map +1 -0
  23. package/dist/cli.d.ts +2 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +24 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/commands/sync.d.ts +4 -0
  28. package/dist/commands/sync.d.ts.map +1 -0
  29. package/dist/commands/sync.js +39 -0
  30. package/dist/commands/sync.js.map +1 -0
  31. package/dist/commands/upload-stat.d.ts +4 -0
  32. package/dist/commands/upload-stat.d.ts.map +1 -0
  33. package/dist/commands/upload-stat.js +21 -0
  34. package/dist/commands/upload-stat.js.map +1 -0
  35. package/dist/commands/validate-only.d.ts +4 -0
  36. package/dist/commands/validate-only.d.ts.map +1 -0
  37. package/dist/commands/validate-only.js +30 -0
  38. package/dist/commands/validate-only.js.map +1 -0
  39. package/dist/lib/config/index.d.ts +11 -0
  40. package/dist/lib/config/index.d.ts.map +1 -0
  41. package/dist/lib/config/index.js +34 -0
  42. package/dist/lib/config/index.js.map +1 -0
  43. package/dist/lib/config/models.d.ts +77 -0
  44. package/dist/lib/config/models.d.ts.map +1 -0
  45. package/dist/lib/config/models.js +57 -0
  46. package/dist/lib/config/models.js.map +1 -0
  47. package/dist/lib/domain/index.d.ts +11 -0
  48. package/dist/lib/domain/index.d.ts.map +1 -0
  49. package/dist/lib/domain/index.js +47 -0
  50. package/dist/lib/domain/index.js.map +1 -0
  51. package/dist/lib/domain/keys.d.ts +17 -0
  52. package/dist/lib/domain/keys.d.ts.map +1 -0
  53. package/dist/lib/domain/keys.js +63 -0
  54. package/dist/lib/domain/keys.js.map +1 -0
  55. package/dist/lib/domain/models.d.ts +45 -0
  56. package/dist/lib/domain/models.d.ts.map +1 -0
  57. package/dist/lib/domain/models.js +3 -0
  58. package/dist/lib/domain/models.js.map +1 -0
  59. package/dist/lib/jest/index.d.ts +24 -0
  60. package/dist/lib/jest/index.d.ts.map +1 -0
  61. package/dist/lib/jest/index.js +57 -0
  62. package/dist/lib/jest/index.js.map +1 -0
  63. package/dist/lib/jest/models.d.ts +42 -0
  64. package/dist/lib/jest/models.d.ts.map +1 -0
  65. package/dist/lib/jest/models.js +27 -0
  66. package/dist/lib/jest/models.js.map +1 -0
  67. package/dist/lib/upload/upload-entities.d.ts +4 -0
  68. package/dist/lib/upload/upload-entities.d.ts.map +1 -0
  69. package/dist/lib/upload/upload-entities.js +52 -0
  70. package/dist/lib/upload/upload-entities.js.map +1 -0
  71. package/dist/lib/upload/upload-jest-stat.d.ts +4 -0
  72. package/dist/lib/upload/upload-jest-stat.d.ts.map +1 -0
  73. package/dist/lib/upload/upload-jest-stat.js +21 -0
  74. package/dist/lib/upload/upload-jest-stat.js.map +1 -0
  75. package/dist/lib/utils.d.ts +16 -0
  76. package/dist/lib/utils.d.ts.map +1 -0
  77. package/dist/lib/utils.js +50 -0
  78. package/dist/lib/utils.js.map +1 -0
  79. package/dist/lib/validators/index.d.ts +4 -0
  80. package/dist/lib/validators/index.d.ts.map +1 -0
  81. package/dist/lib/validators/index.js +8 -0
  82. package/dist/lib/validators/index.js.map +1 -0
  83. package/dist/lib/validators/models.d.ts +92 -0
  84. package/dist/lib/validators/models.d.ts.map +1 -0
  85. package/dist/lib/validators/models.js +20 -0
  86. package/dist/lib/validators/models.js.map +1 -0
  87. package/dist/lib/validators/renderer.d.ts +4 -0
  88. package/dist/lib/validators/renderer.d.ts.map +1 -0
  89. package/dist/lib/validators/renderer.js +83 -0
  90. package/dist/lib/validators/renderer.js.map +1 -0
  91. package/dist/lib/validators/validator.d.ts +25 -0
  92. package/dist/lib/validators/validator.d.ts.map +1 -0
  93. package/dist/lib/validators/validator.js +288 -0
  94. package/dist/lib/validators/validator.js.map +1 -0
  95. package/dist/lib/yaml/index.d.ts +10 -0
  96. package/dist/lib/yaml/index.d.ts.map +1 -0
  97. package/dist/lib/yaml/index.js +29 -0
  98. package/dist/lib/yaml/index.js.map +1 -0
  99. package/dist/lib/yaml/models.d.ts +21 -0
  100. package/dist/lib/yaml/models.d.ts.map +1 -0
  101. package/dist/lib/yaml/models.js +19 -0
  102. package/dist/lib/yaml/models.js.map +1 -0
  103. package/package.json +42 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uploadEntities = void 0;
4
+ const api_1 = require("../../api");
5
+ const utils_1 = require("../utils");
6
+ const mapAssertion = ({ title, description, isAutomated, }) => {
7
+ return {
8
+ title,
9
+ description,
10
+ isAutomated,
11
+ };
12
+ };
13
+ const mapGroup = ({ title, assertions, }) => {
14
+ return { title, assertions: assertions.map(mapAssertion) };
15
+ };
16
+ const mapFeature = ({ code, title, description, filePath, attributes, groups, }) => {
17
+ return {
18
+ code,
19
+ title,
20
+ description,
21
+ attributes,
22
+ filePath: (0, utils_1.normalizePath)(filePath),
23
+ groups: groups.map(mapGroup),
24
+ };
25
+ };
26
+ const mapAttributeValue = ({ title, code, }) => ({
27
+ title,
28
+ code,
29
+ });
30
+ const mapAttribute = ({ title, code, values, }) => ({
31
+ title,
32
+ code,
33
+ values: values.map(mapAttributeValue),
34
+ });
35
+ const mapTree = ({ title, code, attributes, }) => ({
36
+ title,
37
+ code,
38
+ attributes,
39
+ });
40
+ const uploadEntities = async ({ features, attributes = [], trees = [], project: { title, description, repository: repositoryUrl }, }, config, version) => {
41
+ const { host, project } = config;
42
+ const client = new api_1.SpecBoxWebApi(host, utils_1.DEFAULT_API_OPTIONS);
43
+ const body = {
44
+ project: { title, description, repositoryUrl },
45
+ features: features.map(mapFeature),
46
+ attributes: attributes === null || attributes === void 0 ? void 0 : attributes.map(mapAttribute),
47
+ trees: trees === null || trees === void 0 ? void 0 : trees.map(mapTree),
48
+ };
49
+ await client.exportUploadProject(project, { body, version });
50
+ };
51
+ exports.uploadEntities = uploadEntities;
52
+ //# sourceMappingURL=upload-entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-entities.js","sourceRoot":"","sources":["../../../src/lib/upload/upload-entities.ts"],"names":[],"mappings":";;;AAAA,mCASmB;AAKnB,oCAA8D;AAE9D,MAAM,YAAY,GAAG,CAAC,EACpB,KAAK,EACL,WAAW,EACX,WAAW,GACD,EAA0C,EAAE;IACtD,OAAO;QACL,KAAK;QACL,WAAW;QACX,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EAChB,KAAK,EACL,UAAU,GACK,EAA+C,EAAE;IAChE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,EAClB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,GACE,EAAwC,EAAE;IAClD,OAAO;QACL,IAAI;QACJ,KAAK;QACL,WAAW;QACX,UAAU;QACV,QAAQ,EAAE,IAAA,qBAAa,EAAC,QAAQ,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,EACzB,KAAK,EACL,IAAI,GACW,EAA+C,EAAE,CAAC,CAAC;IAClE,KAAK;IACL,IAAI;CACL,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,EACpB,KAAK,EACL,IAAI,EACJ,MAAM,GACI,EAA0C,EAAE,CAAC,CAAC;IACxD,KAAK;IACL,IAAI;IACJ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,EACf,KAAK,EACL,IAAI,EACJ,UAAU,GACL,EAAqC,EAAE,CAAC,CAAC;IAC9C,KAAK;IACL,IAAI;IACJ,UAAU;CACX,CAAC,CAAC;AAEI,MAAM,cAAc,GAAG,KAAK,EACjC,EACE,QAAQ,EACR,UAAU,GAAG,EAAE,EACf,KAAK,GAAG,EAAE,EACV,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,GAC9C,EACd,MAAiB,EACjB,OAAgB,EAChB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,2BAAmB,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAiC;QACzC,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE;QAC9C,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QAClC,UAAU,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,GAAG,CAAC,YAAY,CAAC;QACzC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,OAAO,CAAC;KAC3B,CAAC;IAEF,MAAM,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAtBW,QAAA,cAAc,kBAsBzB"}
@@ -0,0 +1,4 @@
1
+ import { ApiConfig } from '../config/models';
2
+ import { JestReport } from '../jest/models';
3
+ export declare const uploadJestStat: (jestReport: JestReport, config: ApiConfig, version?: string) => Promise<void>;
4
+ //# sourceMappingURL=upload-jest-stat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-jest-stat.d.ts","sourceRoot":"","sources":["../../../src/lib/upload/upload-jest-stat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,eAAO,MAAM,cAAc,eACb,UAAU,UACd,SAAS,YACP,MAAM,kBAqBjB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uploadJestStat = void 0;
4
+ const api_1 = require("../../api");
5
+ const utils_1 = require("../utils");
6
+ const uploadJestStat = async (jestReport, config, version) => {
7
+ const { host, project } = config;
8
+ const { startTime, numTotalTests, testResults } = jestReport;
9
+ // считаем суммарную длительность всех тестов
10
+ // (как при выполнении в одном потоке)
11
+ const totalDuration = testResults.reduce((sum, { startTime, endTime }) => sum + (endTime - startTime), 0);
12
+ const client = new api_1.SpecBoxWebApi(host, utils_1.DEFAULT_API_OPTIONS);
13
+ const body = {
14
+ timestamp: new Date(startTime),
15
+ assertionsCount: numTotalTests,
16
+ duration: totalDuration,
17
+ };
18
+ await client.statUploadAutotests({ project, version, body });
19
+ };
20
+ exports.uploadJestStat = uploadJestStat;
21
+ //# sourceMappingURL=upload-jest-stat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-jest-stat.js","sourceRoot":"","sources":["../../../src/lib/upload/upload-jest-stat.ts"],"names":[],"mappings":";;;AAAA,mCAGmB;AAGnB,oCAA+C;AAExC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAsB,EACtB,MAAiB,EACjB,OAAgB,EAChB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IAE7D,6CAA6C;IAC7C,sCAAsC;IACtC,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,EAC5D,CAAC,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,2BAAmB,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAkD;QAC1D,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;QAC9B,eAAe,EAAE,aAAa;QAC9B,QAAQ,EAAE,aAAa;KACxB,CAAC;IAEF,MAAM,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAxBW,QAAA,cAAc,kBAwBzB"}
@@ -0,0 +1,16 @@
1
+ import * as d from "io-ts/Decoder";
2
+ import { SpecBoxWebApiOptionalParams } from "../api";
3
+ export declare const DEFAULT_API_OPTIONS: SpecBoxWebApiOptionalParams;
4
+ export interface CommonOptions {
5
+ config?: string;
6
+ prjversion?: string;
7
+ }
8
+ export declare const CWD: string;
9
+ export declare const normalizePath: (path: string) => string;
10
+ export declare const resolvePath: (path: string, basePath?: string) => string;
11
+ export declare const fileExists: (path: string, basePath?: string) => Promise<boolean>;
12
+ export declare const readTextFile: (path: string, basePath?: string) => Promise<string>;
13
+ export declare const parseObject: <T>(data: unknown, decoder: d.Decoder<unknown, T>) => T;
14
+ export declare const readYaml: <T>(decoder: d.Decoder<unknown, T>, path: string, basePath?: string) => Promise<T>;
15
+ export declare const readYamlIfExists: <T>(decoder: d.Decoder<unknown, T>, path: string, basePath?: string) => Promise<T | undefined>;
16
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAGnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,2BAGjC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,GAAG,QAAgB,CAAC;AAEjC,eAAO,MAAM,aAAa,SAAU,MAAM,WACS,CAAC;AAEpD,eAAO,MAAM,WAAW,SAAU,MAAM,8BACf,CAAC;AAC1B,eAAO,MAAM,UAAU,SAAU,MAAM,wCACN,CAAC;AAElC,eAAO,MAAM,YAAY,SAAgB,MAAM,aAAa,MAAM,oBAKjE,CAAC;AAEF,eAAO,MAAM,WAAW,YAChB,OAAO,sCAUd,CAAC;AAEF,eAAO,MAAM,QAAQ,4CAEb,MAAM,aACD,MAAM,eAMlB,CAAC;AAEF,eAAO,MAAM,gBAAgB,4CAErB,MAAM,aACD,MAAM,2BASlB,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readYamlIfExists = exports.readYaml = exports.parseObject = exports.readTextFile = exports.fileExists = exports.resolvePath = exports.normalizePath = exports.CWD = exports.DEFAULT_API_OPTIONS = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const node_path_1 = require("node:path");
6
+ const fs_extra_1 = require("fs-extra");
7
+ const d = tslib_1.__importStar(require("io-ts/Decoder"));
8
+ const Either_1 = require("fp-ts/lib/Either");
9
+ const yaml_1 = require("yaml");
10
+ exports.DEFAULT_API_OPTIONS = {
11
+ allowInsecureConnection: true,
12
+ retryOptions: { maxRetries: 0 },
13
+ };
14
+ exports.CWD = process.cwd();
15
+ const normalizePath = (path) => path.replace(/[\\/]+/g, "/").replace(/[/]$/g, "");
16
+ exports.normalizePath = normalizePath;
17
+ const resolvePath = (path, basePath = exports.CWD) => (0, node_path_1.resolve)(basePath, path);
18
+ exports.resolvePath = resolvePath;
19
+ const fileExists = (path, basePath = exports.CWD) => (0, fs_extra_1.exists)((0, node_path_1.resolve)(basePath, path));
20
+ exports.fileExists = fileExists;
21
+ const readTextFile = async (path, basePath) => {
22
+ const resolvedPath = (0, exports.resolvePath)(path, basePath);
23
+ const content = await (0, fs_extra_1.readFile)(resolvedPath);
24
+ return content.toString();
25
+ };
26
+ exports.readTextFile = readTextFile;
27
+ const parseObject = (data, decoder) => {
28
+ const result = decoder.decode(data);
29
+ if ((0, Either_1.isLeft)(result)) {
30
+ const errorDescription = d.draw(result.left);
31
+ throw new Error(errorDescription);
32
+ }
33
+ return result.right;
34
+ };
35
+ exports.parseObject = parseObject;
36
+ const readYaml = async (decoder, path, basePath) => {
37
+ const content = await (0, exports.readTextFile)(path, basePath);
38
+ const data = (0, yaml_1.parse)(content);
39
+ return (0, exports.parseObject)(data, decoder);
40
+ };
41
+ exports.readYaml = readYaml;
42
+ const readYamlIfExists = async (decoder, path, basePath) => {
43
+ const yamlExists = await (0, exports.fileExists)(path, basePath);
44
+ if (yamlExists) {
45
+ return (0, exports.readYaml)(decoder, path, basePath);
46
+ }
47
+ return undefined;
48
+ };
49
+ exports.readYamlIfExists = readYamlIfExists;
50
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;;;AAAA,yCAAoC;AACpC,uCAA4C;AAC5C,yDAAmC;AACnC,6CAA0C;AAC1C,+BAA6B;AAGhB,QAAA,mBAAmB,GAAgC;IAC9D,uBAAuB,EAAE,IAAI;IAC7B,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;CAChC,CAAC;AAOW,QAAA,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE1B,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AADvC,QAAA,aAAa,iBAC0B;AAE7C,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAQ,GAAG,WAAG,EAAE,EAAE,CAC1D,IAAA,mBAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AADb,QAAA,WAAW,eACE;AACnB,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,QAAQ,GAAG,WAAG,EAAE,EAAE,CACzD,IAAA,iBAAM,EAAC,IAAA,mBAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AADrB,QAAA,UAAU,cACW;AAE3B,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAE,QAAiB,EAAE,EAAE;IACpE,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,MAAM,WAAW,GAAG,CACzB,IAAa,EACb,OAA8B,EAC3B,EAAE;IACL,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,IAAA,eAAM,EAAC,MAAM,CAAC,EAAE;QAClB,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;KACnC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAXW,QAAA,WAAW,eAWtB;AAEK,MAAM,QAAQ,GAAG,KAAK,EAC3B,OAA8B,EAC9B,IAAY,EACZ,QAAiB,EACL,EAAE;IACd,MAAM,OAAO,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,IAAI,GAAY,IAAA,YAAK,EAAC,OAAO,CAAC,CAAC;IAErC,OAAO,IAAA,mBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC;AATW,QAAA,QAAQ,YASnB;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAA8B,EAC9B,IAAY,EACZ,QAAiB,EACO,EAAE;IAC1B,MAAM,UAAU,GAAG,MAAM,IAAA,kBAAU,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,UAAU,EAAE;QACd,OAAO,IAAA,gBAAQ,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC1C;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B"}
@@ -0,0 +1,4 @@
1
+ export { Validator } from './validator';
2
+ export { printError } from './renderer';
3
+ export { LoaderError } from './models';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printError = exports.Validator = void 0;
4
+ var validator_1 = require("./validator");
5
+ Object.defineProperty(exports, "Validator", { enumerable: true, get: function () { return validator_1.Validator; } });
6
+ var renderer_1 = require("./renderer");
7
+ Object.defineProperty(exports, "printError", { enumerable: true, get: function () { return renderer_1.printError; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/validators/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,uCAAwC;AAA/B,sGAAA,UAAU,OAAA"}
@@ -0,0 +1,92 @@
1
+ import { Assertion, AssertionGroup, Attribute, AttributeValue, Feature, Tree } from '../domain';
2
+ export type AttributeDuplicateError = {
3
+ type: 'attribute-duplicate';
4
+ filePath: string;
5
+ attribute: Attribute;
6
+ };
7
+ export type AttributeValueDuplicateError = {
8
+ type: 'attribute-value-duplicate';
9
+ filePath: string;
10
+ attribute: Attribute;
11
+ attributeValue: AttributeValue;
12
+ };
13
+ export type CodeError = {
14
+ type: 'code-format-error';
15
+ filePath: string;
16
+ code: string;
17
+ };
18
+ export type TreeDuplicateError = {
19
+ type: 'tree-duplicate';
20
+ filePath: string;
21
+ tree: Tree;
22
+ };
23
+ export type TreeMissingAttributeError = {
24
+ type: 'tree-missing-attribute';
25
+ filePath: string;
26
+ tree: Tree;
27
+ attributeCode: string;
28
+ };
29
+ export type TreeAttributeDuplicateError = {
30
+ type: 'tree-attribute-duplicate';
31
+ filePath: string;
32
+ tree: Tree;
33
+ attributeCode: string;
34
+ };
35
+ export type FeatureCodeError = {
36
+ type: 'featrue-code-format';
37
+ filePath: string;
38
+ feature: Feature;
39
+ code: string;
40
+ };
41
+ export type FeatureAttributeValueCodeError = {
42
+ type: 'featrue-attribute-value-code-format';
43
+ filePath: string;
44
+ feature: Feature;
45
+ attribute: string;
46
+ code: string;
47
+ };
48
+ export type FeatureCodeDuplicateError = {
49
+ type: 'feature-code-duplicate';
50
+ filePath: string;
51
+ feature: Feature;
52
+ firstFeature: Feature;
53
+ code: string;
54
+ };
55
+ export type FeatureMissingAttributeError = {
56
+ type: 'feature-missing-attribute';
57
+ filePath: string;
58
+ feature: Feature;
59
+ attributeCode: string;
60
+ };
61
+ export type FeatureMissingLinkError = {
62
+ type: 'feature-missing-link';
63
+ filePath: string;
64
+ feature: Feature;
65
+ field: 'description' | 'title' | 'group.title' | 'assert.title' | 'assert.description';
66
+ link: string;
67
+ };
68
+ export type AssertionDuplicateError = {
69
+ type: 'assertion-duplicate';
70
+ filePath: string;
71
+ feature: Feature;
72
+ assertionGroup: AssertionGroup;
73
+ assertion: Assertion;
74
+ };
75
+ export type LoaderError = {
76
+ type: 'loader-error';
77
+ filePath: string;
78
+ fileType: 'config' | 'feature';
79
+ description: string;
80
+ };
81
+ export type JestUnusedTestError = {
82
+ type: 'jest-unused';
83
+ filePath: string;
84
+ test: string;
85
+ };
86
+ export type ValidationError = AttributeDuplicateError | AttributeValueDuplicateError | TreeDuplicateError | TreeMissingAttributeError | TreeAttributeDuplicateError | FeatureCodeError | FeatureAttributeValueCodeError | FeatureCodeDuplicateError | FeatureMissingAttributeError | FeatureMissingLinkError | AssertionDuplicateError | CodeError | LoaderError | JestUnusedTestError;
87
+ export type ValidationErrorTypes = ValidationError['type'];
88
+ export type ErrorSeverity = 'info' | 'warning' | 'error';
89
+ export declare const ERROR_SEVERITY: {
90
+ [key in ValidationErrorTypes]: ErrorSeverity;
91
+ };
92
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/validators/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERROR_SEVERITY = void 0;
4
+ exports.ERROR_SEVERITY = {
5
+ 'loader-error': 'error',
6
+ 'code-format-error': 'error',
7
+ 'attribute-duplicate': 'error',
8
+ 'attribute-value-duplicate': 'error',
9
+ 'tree-duplicate': 'error',
10
+ 'tree-missing-attribute': 'error',
11
+ 'tree-attribute-duplicate': 'error',
12
+ 'assertion-duplicate': 'error',
13
+ 'featrue-code-format': 'error',
14
+ 'feature-code-duplicate': 'error',
15
+ 'feature-missing-attribute': 'error',
16
+ 'featrue-attribute-value-code-format': 'error',
17
+ 'feature-missing-link': 'warning',
18
+ 'jest-unused': 'warning',
19
+ };
20
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/validators/models.ts"],"names":[],"mappings":";;;AAwHa,QAAA,cAAc,GAAqD;IAC9E,cAAc,EAAE,OAAO;IACvB,mBAAmB,EAAE,OAAO;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,2BAA2B,EAAE,OAAO;IACpC,gBAAgB,EAAE,OAAO;IACzB,wBAAwB,EAAE,OAAO;IACjC,0BAA0B,EAAE,OAAO;IACnC,qBAAqB,EAAE,OAAO;IAC9B,qBAAqB,EAAE,OAAO;IAC9B,wBAAwB,EAAE,OAAO;IACjC,2BAA2B,EAAE,OAAO;IACpC,qCAAqC,EAAE,OAAO;IAC9C,sBAAsB,EAAE,SAAS;IACjC,aAAa,EAAE,SAAS;CACzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ValidationError } from './models';
2
+ export declare const printError: (e: ValidationError) => void;
3
+ export declare const renderStats: (title: string, errors: ValidationError[]) => void;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/lib/validators/renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,eAAe,EAAE,MAAM,UAAU,CAAC;AAgE1E,eAAO,MAAM,UAAU,MAAO,eAAe,SAG5C,CAAC;AAEF,eAAO,MAAM,WAAW,UAAW,MAAM,UAAU,eAAe,EAAE,SA0BnE,CAAC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderStats = exports.printError = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const models_1 = require("./models");
7
+ const renderError = (e) => {
8
+ switch (e.type) {
9
+ case 'loader-error':
10
+ return `Ошибка чтения ${strong(e.fileType)} файла\n${val(e.description)}`;
11
+ case 'code-format-error':
12
+ return `Неправильный формат кода: ${val(e.code)}`;
13
+ case 'attribute-duplicate':
14
+ return `Дубликат кода атрибута: ${val(e.attribute.code)}`;
15
+ case 'attribute-value-duplicate':
16
+ return `Дубликат кода значения атрибута: ${val(e.attributeValue.code)} (атрибут ${val(e.attribute.code)})`;
17
+ case 'tree-duplicate':
18
+ return `Дубликат кода описания дерева: ${val(e.tree.code)}`;
19
+ case 'tree-missing-attribute':
20
+ return `Неизвестный атрибут в дереве: ${val(e.attributeCode)} (дерево ${val(e.tree.code)})`;
21
+ case 'tree-attribute-duplicate':
22
+ return `Повторяющийся атрибут в описании дерева: ${val(e.attributeCode)} (дерево ${val(e.tree.code)})`;
23
+ case 'featrue-code-format':
24
+ return `Неправильный формат кода фичи: ${val(e.code)}`;
25
+ case 'featrue-attribute-value-code-format':
26
+ return `Неправильный формат кода значения атрибута фичи: ${val(e.code)} (атрибут ${val(e.attribute)})`;
27
+ case 'feature-code-duplicate':
28
+ return `Дубликат кода фичи: ${val(e.code)}`;
29
+ case 'feature-missing-attribute':
30
+ return `Неизвестный атрибут: ${val(e.attributeCode)}`;
31
+ case 'feature-missing-link':
32
+ return `Неизвестная ссылка в поле ${strong(e.field)}: ${val(e.link)}`;
33
+ case 'assertion-duplicate':
34
+ return `Дубликат утверждения: ${val(e.assertion.title)} (группа ${val(e.assertionGroup.title)})`;
35
+ case 'jest-unused':
36
+ return `Обнаружен тест без описания\n${val(e.test)}`;
37
+ }
38
+ };
39
+ const path = (p) => chalk_1.default.gray(p);
40
+ const strong = (p) => chalk_1.default.bold(p);
41
+ const val = (p) => chalk_1.default.cyan(p);
42
+ const errorBadge = (p) => chalk_1.default.bgRed(` ${p} `);
43
+ const warnBadge = (p) => chalk_1.default.bgYellow(chalk_1.default.black(` ${p} `));
44
+ const infoBadge = (p) => chalk_1.default.bgBlackBright(` ${p} `);
45
+ const formatSeverity = (s) => {
46
+ switch (s) {
47
+ case 'error':
48
+ return errorBadge('ERROR');
49
+ case 'warning':
50
+ return warnBadge('WARN');
51
+ case 'info':
52
+ return infoBadge('INFO');
53
+ }
54
+ };
55
+ const printError = (e) => {
56
+ const severity = formatSeverity(models_1.ERROR_SEVERITY[e.type]);
57
+ console.log(`${severity} ${renderError(e)}\n${path(e.filePath)}\n`);
58
+ };
59
+ exports.printError = printError;
60
+ const renderStats = (title, errors) => {
61
+ if (errors.length === 0) {
62
+ return;
63
+ }
64
+ const errorsCount = errors.filter((e) => models_1.ERROR_SEVERITY[e.type] === 'error').length;
65
+ const warnsCount = errors.filter((e) => models_1.ERROR_SEVERITY[e.type] === 'warning').length;
66
+ if (!errorsCount && !warnsCount) {
67
+ console.log(`${chalk_1.default.green('Ошибки валидации не обнаружены')}`);
68
+ return;
69
+ }
70
+ let report = '';
71
+ if (errorsCount) {
72
+ report += `ошибок: ${errorBadge(errorsCount)}`;
73
+ }
74
+ if (errorsCount && warnsCount) {
75
+ report += ` / `;
76
+ }
77
+ if (warnsCount) {
78
+ report += `предупреждений: ${warnBadge(warnsCount)}`;
79
+ }
80
+ console.log(`${title} ${report}`);
81
+ };
82
+ exports.renderStats = renderStats;
83
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/lib/validators/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ProjectData } from '../domain';
2
+ import { LoaderError } from './models';
3
+ export declare class Validator {
4
+ private readonly loaderErrors;
5
+ private readonly metaErrors;
6
+ private readonly featureErrors;
7
+ private readonly jestUnusedTests;
8
+ private metaFilePath;
9
+ get hasCriticalErrors(): boolean;
10
+ printReport(): void;
11
+ registerLoaderError(error: unknown, filePath: string, fileType: LoaderError['fileType']): void;
12
+ registerJestUnusedTests(test: string, filePath: string): void;
13
+ validate({ trees, attributes, metaFilePath, features }: ProjectData): void;
14
+ private validateMetaAttributes;
15
+ private validateMetaAttributeValues;
16
+ private validateMetaTrees;
17
+ private validateFeatures;
18
+ private validateFeature;
19
+ private validateAsserions;
20
+ private validateFeatureLinks;
21
+ private validateLinks;
22
+ private validateCode;
23
+ }
24
+ export declare const getLoaderError: (error: unknown, filePath: string, fileType: LoaderError['fileType']) => LoaderError;
25
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/lib/validators/validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,WAAW,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,EAYL,WAAW,EAKZ,MAAM,UAAU,CAAC;AAOlB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,YAAY,CAAM;IAE1B,IAAI,iBAAiB,IAAI,OAAO,CAO/B;IAED,WAAW;IAcX,mBAAmB,CACjB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC;IAKnC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAQtD,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,WAAW;IASnE,OAAO,CAAC,sBAAsB;IAqC9B,OAAO,CAAC,2BAA2B;IA4BnC,OAAO,CAAC,iBAAiB;IAoDzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,eAAe;IA+CvB,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,YAAY;CAKrB;AAED,eAAO,MAAM,cAAc,UAClB,OAAO,YACJ,MAAM,YACN,WAAW,CAAC,UAAU,CAAC,KAChC,WAcF,CAAC"}