spec-box-tms-sync 0.3.1 → 0.4.1
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/README.md +17 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/markdown.d.ts +4 -0
- package/dist/commands/markdown.d.ts.map +1 -0
- package/dist/commands/markdown.js +21 -0
- package/dist/commands/markdown.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +3 -15
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/validate-only.d.ts.map +1 -1
- package/dist/commands/validate-only.js +2 -13
- package/dist/commands/validate-only.js.map +1 -1
- package/dist/lib/config/index.d.ts +4 -0
- package/dist/lib/config/index.d.ts.map +1 -1
- package/dist/lib/config/index.js +16 -1
- package/dist/lib/config/index.js.map +1 -1
- package/dist/lib/config/models.d.ts +8 -1
- package/dist/lib/config/models.d.ts.map +1 -1
- package/dist/lib/config/models.js +5 -1
- package/dist/lib/config/models.js.map +1 -1
- package/dist/lib/markdown/build-index.d.ts +3 -0
- package/dist/lib/markdown/build-index.d.ts.map +1 -0
- package/dist/lib/markdown/build-index.js +23 -0
- package/dist/lib/markdown/build-index.js.map +1 -0
- package/dist/lib/markdown/feature-to-markdown.d.ts +3 -0
- package/dist/lib/markdown/feature-to-markdown.d.ts.map +1 -0
- package/dist/lib/markdown/feature-to-markdown.js +42 -0
- package/dist/lib/markdown/feature-to-markdown.js.map +1 -0
- package/dist/lib/markdown/index.d.ts +3 -0
- package/dist/lib/markdown/index.d.ts.map +1 -0
- package/dist/lib/markdown/index.js +37 -0
- package/dist/lib/markdown/index.js.map +1 -0
- package/dist/lib/validators/validator.d.ts +2 -1
- package/dist/lib/validators/validator.d.ts.map +1 -1
- package/dist/lib/validators/validator.js +5 -5
- package/dist/lib/validators/validator.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -257,6 +257,20 @@ describe('Главная страница', () => {
|
|
|
257
257
|
- `@<attribute>` — значение указанного атрибута (идентификатор значения)
|
|
258
258
|
- `$<attribute>` — значение указанного атрибута (человеко-понятное название)
|
|
259
259
|
|
|
260
|
+
## Экспорт спецификаций в формате Markdown
|
|
261
|
+
|
|
262
|
+
Можно выполнить экспорт спецификаций в формате Markdown, по-умолчанию экспорт происходит в папку `docs` - значение можно переопределить в файле конфигурации
|
|
263
|
+
|
|
264
|
+
```json
|
|
265
|
+
"markdown": {
|
|
266
|
+
"path": "documentation"
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Результат экспорта повторяет структуру папок спецификаций, ссылки заменяются на стандартные ссылки формата wiki `[[feature-path | $feature-code]]`.
|
|
271
|
+
|
|
272
|
+
Папку можно преобразовать в статический сайт с документацией при помощи [MkDocs](https://www.mkdocs.org)
|
|
273
|
+
|
|
260
274
|
## Формат конфига
|
|
261
275
|
|
|
262
276
|
Ниже указаны все возможные параметры конфигурационного файла:
|
|
@@ -279,6 +293,9 @@ describe('Главная страница', () => {
|
|
|
279
293
|
"tests/unit/**/*.spec.yml"
|
|
280
294
|
]
|
|
281
295
|
},
|
|
296
|
+
"markdown": {
|
|
297
|
+
"path": "documentation"
|
|
298
|
+
},
|
|
282
299
|
// настройки для сопоставления ФТ с отчетами jest
|
|
283
300
|
"jest": {
|
|
284
301
|
"reportPath": "jest-report.json", // путь к файлу с отчетом о выполнении тестов
|
package/dist/cli.js
CHANGED
|
@@ -6,10 +6,12 @@ const helpers_1 = require("yargs/helpers");
|
|
|
6
6
|
const sync_1 = require("./commands/sync");
|
|
7
7
|
const upload_stat_1 = require("./commands/upload-stat");
|
|
8
8
|
const validate_only_1 = require("./commands/validate-only");
|
|
9
|
+
const markdown_1 = require("./commands/markdown");
|
|
9
10
|
(0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
10
11
|
.command(sync_1.cmdSync)
|
|
11
12
|
.command(upload_stat_1.cmdUploadStat)
|
|
12
13
|
.command(validate_only_1.cmdValidateOnly)
|
|
14
|
+
.command(markdown_1.cmdMarkdown)
|
|
13
15
|
.option('config', {
|
|
14
16
|
alias: 'c',
|
|
15
17
|
type: 'string',
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAAA,gEAAgC;AAChC,2CAAwC;AAExC,0CAA0C;AAC1C,wDAAuD;AACvD,4DAA2D;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAAA,gEAAgC;AAChC,2CAAwC;AAExC,0CAA0C;AAC1C,wDAAuD;AACvD,4DAA2D;AAC3D,kDAAkD;AAElD,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,OAAO,CAAC,cAAO,CAAC;KAChB,OAAO,CAAC,2BAAa,CAAC;KACtB,OAAO,CAAC,+BAAe,CAAC;KACxB,OAAO,CAAC,sBAAW,CAAC;KACpB,MAAM,CAAC,QAAQ,EAAE;IAChB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,aAAa;CAC3B,CAAC;KACD,OAAO,CAAC,YAAY,EAAE;IACrB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,iBAAiB;CAC/B,CAAC;KACD,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/commands/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAuBxD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdMarkdown = void 0;
|
|
4
|
+
const config_1 = require("../lib/config");
|
|
5
|
+
const markdown_1 = require("../lib/markdown");
|
|
6
|
+
exports.cmdMarkdown = {
|
|
7
|
+
command: 'markdown',
|
|
8
|
+
handler: async (args) => {
|
|
9
|
+
console.log('Export to Markdown');
|
|
10
|
+
const { config } = args;
|
|
11
|
+
const { yml, api, markdown, projectPath } = await (0, config_1.loadConfig)(config);
|
|
12
|
+
const { projectData, validationContext } = await (0, config_1.loadProject)(yml.metaPath, yml.files, projectPath);
|
|
13
|
+
validationContext.printReport();
|
|
14
|
+
if (validationContext.hasCriticalErrors) {
|
|
15
|
+
throw Error('Экспорт невозможен из-за наличия критических ошибок');
|
|
16
|
+
}
|
|
17
|
+
await (0, markdown_1.exportMarkdown)(projectData, (markdown === null || markdown === void 0 ? void 0 : markdown.path) || 'docs');
|
|
18
|
+
console.log(`Экспорт проекта ${api.project} завершен успешно`);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/commands/markdown.ts"],"names":[],"mappings":";;;AAGA,0CAAwD;AACxD,8CAAiD;AAEpC,QAAA,WAAW,GAAqC;IAC3D,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QAErE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAA,oBAAW,EAC1D,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,EACT,WAAW,CACZ,CAAC;QAGF,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,iBAAiB,CAAC,iBAAiB,EAAE;YACvC,MAAM,KAAK,CAAC,qDAAqD,CAAC,CAAC;SACpE;QAED,MAAM,IAAA,yBAAc,EAAC,WAAW,EAAE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,KAAI,MAAM,CAAC,CAAC;QAE5D,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACjE,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAOtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAkCpD,CAAC"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,30 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cmdSync = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
|
|
6
4
|
const config_1 = require("../lib/config");
|
|
7
|
-
const yaml_1 = require("../lib/yaml");
|
|
8
|
-
const upload_entities_1 = require("../lib/upload/upload-entities");
|
|
9
|
-
const jest_1 = require("../lib/test-matcher/jest");
|
|
10
|
-
const domain_1 = require("../lib/domain");
|
|
11
|
-
const validators_1 = require("../lib/validators");
|
|
12
5
|
const test_matcher_1 = require("../lib/test-matcher");
|
|
6
|
+
const jest_1 = require("../lib/test-matcher/jest");
|
|
13
7
|
const junit_1 = require("../lib/test-matcher/junit");
|
|
8
|
+
const upload_entities_1 = require("../lib/upload/upload-entities");
|
|
14
9
|
exports.cmdSync = {
|
|
15
10
|
command: 'sync',
|
|
16
11
|
handler: async (args) => {
|
|
17
12
|
console.log('SYNC');
|
|
18
13
|
const { config, prjversion: version } = args;
|
|
19
|
-
const validationContext = new validators_1.Validator();
|
|
20
14
|
const { yml, api, jest, JUnit, projectPath } = await (0, config_1.loadConfig)(config);
|
|
21
|
-
const
|
|
22
|
-
const files = await (0, fast_glob_1.default)(yml.files, { cwd: projectPath });
|
|
23
|
-
const yamls = await Promise.all(files.map((path) => (0, yaml_1.loadYaml)(validationContext, path, projectPath)));
|
|
24
|
-
const successYamls = new Array();
|
|
25
|
-
yamls.forEach((yaml) => yaml && successYamls.push(yaml));
|
|
26
|
-
const projectData = (0, domain_1.processYamlFiles)(successYamls, meta);
|
|
27
|
-
validationContext.validate(projectData);
|
|
15
|
+
const { projectData, validationContext } = await (0, config_1.loadProject)(yml.metaPath, yml.files, projectPath);
|
|
28
16
|
if (jest) {
|
|
29
17
|
const jestReport = await (0, jest_1.loadJestReport)(jest.reportPath, projectPath);
|
|
30
18
|
(0, test_matcher_1.applyTestReport)(validationContext, projectData, jestReport, jest.keys);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;;AAEA,0CAAwD;AACxD,sDAAsD;AACtD,mDAA0D;AAC1D,qDAA4D;AAC5D,mEAA+D;AAGlD,QAAA,OAAO,GAAqC;IACvD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QAExE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAA,oBAAW,EAC1D,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,EACT,WAAW,CACZ,CAAC;QAEF,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE;QAED,IAAI,KAAK,EAAE;YACT,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEzE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1E;QAED,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,iBAAiB,CAAC,iBAAiB,EAAE;YACvC,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACrE;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,OAAO,WAAW,OAAO,EAAE,CAAC,CAAC;QACjE,MAAM,IAAA,gCAAc,EAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-only.d.ts","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"validate-only.d.ts","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAMtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CA2B5D,CAAC"}
|
|
@@ -2,26 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cmdValidateOnly = void 0;
|
|
4
4
|
const config_1 = require("../lib/config");
|
|
5
|
-
const validators_1 = require("../lib/validators");
|
|
6
|
-
const fast_glob_1 = require("fast-glob");
|
|
7
|
-
const yaml_1 = require("../lib/yaml");
|
|
8
|
-
const domain_1 = require("../lib/domain");
|
|
9
|
-
const jest_1 = require("../lib/test-matcher/jest");
|
|
10
5
|
const test_matcher_1 = require("../lib/test-matcher");
|
|
6
|
+
const jest_1 = require("../lib/test-matcher/jest");
|
|
11
7
|
const junit_1 = require("../lib/test-matcher/junit");
|
|
12
8
|
exports.cmdValidateOnly = {
|
|
13
9
|
command: 'validate',
|
|
14
10
|
handler: async (args) => {
|
|
15
11
|
console.log('VALIDATION');
|
|
16
12
|
const { yml, jest, JUnit, projectPath } = await (0, config_1.loadConfig)(args.config);
|
|
17
|
-
const validationContext =
|
|
18
|
-
const meta = await (0, config_1.loadMeta)(validationContext, yml.metaPath, projectPath);
|
|
19
|
-
const files = await (0, fast_glob_1.glob)(yml.files, { cwd: projectPath });
|
|
20
|
-
const yamls = await Promise.all(files.map((path) => (0, yaml_1.loadYaml)(validationContext, path, projectPath)));
|
|
21
|
-
const successYamls = new Array();
|
|
22
|
-
yamls.forEach((yaml) => yaml && successYamls.push(yaml));
|
|
23
|
-
const projectData = (0, domain_1.processYamlFiles)(successYamls, meta);
|
|
24
|
-
validationContext.validate(projectData);
|
|
13
|
+
const { projectData, validationContext } = await (0, config_1.loadProject)(yml.metaPath, yml.files, projectPath);
|
|
25
14
|
if (jest) {
|
|
26
15
|
const jestReport = await (0, jest_1.loadJestReport)(jest.reportPath, projectPath);
|
|
27
16
|
(0, test_matcher_1.applyTestReport)(validationContext, projectData, jestReport, jest.keys);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-only.js","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"validate-only.js","sourceRoot":"","sources":["../../src/commands/validate-only.ts"],"names":[],"mappings":";;;AAEA,0CAAwD;AACxD,sDAAsD;AACtD,mDAA0D;AAC1D,qDAA4D;AAG/C,QAAA,eAAe,GAAqC;IAC/D,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAA,oBAAW,EAC1D,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,EACT,WAAW,CACZ,CAAC;QAEF,IAAI,IAAI,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxE;QAED,IAAI,KAAK,EAAE;YACT,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEzE,IAAA,8BAAe,EAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1E;QAED,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CACF,CAAC"}
|
|
@@ -8,4 +8,8 @@ export declare const loadMeta: (validationContext: Validator, path?: string, bas
|
|
|
8
8
|
filePath: string;
|
|
9
9
|
meta: Meta;
|
|
10
10
|
}>;
|
|
11
|
+
export declare const loadProject: (metaPath: string | undefined, filePaths: string[], projectPath: string | undefined) => Promise<{
|
|
12
|
+
projectData: import("../domain").ProjectData;
|
|
13
|
+
validationContext: Validator;
|
|
14
|
+
}>;
|
|
11
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAc,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,UAAU,EAA8B,MAAM,UAAU,CAAC;AAIxE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAE3E,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD,eAAO,MAAM,UAAU,qBAEpB,QAAQ,UAAU,CAOpB,CAAC;AAEF,eAAO,MAAM,QAAQ,sBACA,SAAS,SACrB,MAAM,aACH,MAAM;cACK,MAAM;UAAQ,IAAI;EAexC,CAAC;AAEF,eAAO,MAAM,WAAW,aACZ,MAAM,GAAG,SAAS,aACjB,MAAM,EAAE,eACN,MAAM,GAAG,SAAS;;;EAgBhC,CAAC"}
|
package/dist/lib/config/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadMeta = exports.loadConfig = exports.DEFAULT_META_PATH = exports.DEFAULT_CONFIG_PATH = void 0;
|
|
3
|
+
exports.loadProject = exports.loadMeta = exports.loadConfig = exports.DEFAULT_META_PATH = exports.DEFAULT_CONFIG_PATH = void 0;
|
|
4
|
+
const fast_glob_1 = require("fast-glob");
|
|
4
5
|
const utils_1 = require("../utils");
|
|
5
6
|
const validators_1 = require("../validators");
|
|
6
7
|
const validator_1 = require("../validators/validator");
|
|
7
8
|
const models_1 = require("./models");
|
|
9
|
+
const yaml_1 = require("../yaml");
|
|
10
|
+
const domain_1 = require("../domain");
|
|
8
11
|
exports.DEFAULT_CONFIG_PATH = '.tms.json';
|
|
9
12
|
exports.DEFAULT_META_PATH = '.spec-box-meta.yml';
|
|
10
13
|
const loadConfig = async (path = exports.DEFAULT_CONFIG_PATH) => {
|
|
@@ -31,4 +34,16 @@ const loadMeta = async (validationContext, path, basePath = utils_1.CWD // TODO:
|
|
|
31
34
|
}
|
|
32
35
|
};
|
|
33
36
|
exports.loadMeta = loadMeta;
|
|
37
|
+
const loadProject = async (metaPath, filePaths, projectPath) => {
|
|
38
|
+
const validationContext = new validators_1.Validator();
|
|
39
|
+
const meta = await (0, exports.loadMeta)(validationContext, metaPath, projectPath);
|
|
40
|
+
const files = await (0, fast_glob_1.glob)(filePaths, { cwd: projectPath });
|
|
41
|
+
const yamls = await Promise.all(files.map((path) => (0, yaml_1.loadYaml)(validationContext, path, projectPath)));
|
|
42
|
+
const successYamls = new Array();
|
|
43
|
+
yamls.forEach((yaml) => yaml && successYamls.push(yaml));
|
|
44
|
+
const projectData = (0, domain_1.processYamlFiles)(successYamls, meta);
|
|
45
|
+
validationContext.validate(projectData);
|
|
46
|
+
return { projectData, validationContext };
|
|
47
|
+
};
|
|
48
|
+
exports.loadProject = loadProject;
|
|
34
49
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":";;;AAAA,oCAMkB;AAClB,8CAAsD;AACtD,uDAAyD;AACzD,qCAAwE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AACjC,oCAMkB;AAClB,8CAAsD;AACtD,uDAAyD;AACzD,qCAAwE;AACxE,kCAA6C;AAC7C,sCAA6C;AAIhC,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,iBAAiB,GAAG,oBAAoB,CAAC;AAE/C,MAAM,UAAU,GAAG,KAAK,EAC7B,IAAI,GAAG,2BAAmB,EACL,EAAE;IACvB,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9B,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAC;IAEhD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AATW,QAAA,UAAU,cASrB;AAEK,MAAM,QAAQ,GAAG,KAAK,EAC3B,iBAA4B,EAC5B,IAAa,EACb,WAAmB,WAAG,CAAC,gCAAgC;EACZ,EAAE;IAC7C,MAAM,QAAQ,GAAG,IAAI,IAAI,yBAAiB,CAAC;IAC3C,IAAI,UAAU,GAAG,IAAI;QACnB,CAAC,CAAC,IAAA,gBAAQ,EAAC,oBAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC3C,CAAC,CAAC,IAAA,wBAAgB,EAAC,oBAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEtD,IAAI;QACF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;QAE3B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC3B;IAAC,OAAO,KAAK,EAAE;QACd,IAAA,uBAAU,EAAC,IAAA,0BAAc,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACnD;AACH,CAAC,CAAC;AAnBW,QAAA,QAAQ,YAmBnB;AAEK,MAAM,WAAW,GAAG,KAAK,EAC9B,QAA4B,EAC5B,SAAmB,EACnB,WAA+B,EAC/B,EAAE;IACF,MAAM,iBAAiB,GAAG,IAAI,sBAAS,EAAE,CAAC;IAE1C,MAAM,IAAI,GAAG,MAAM,IAAA,gBAAQ,EAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAI,EAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CACpE,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAY,CAAC;IAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,IAAA,yBAAgB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACzD,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC5C,CAAC,CAAC;AAnBW,QAAA,WAAW,eAmBtB"}
|
|
@@ -43,6 +43,9 @@ export declare const ymlConfigDecoder: d.Decoder<unknown, Partial<{
|
|
|
43
43
|
}> & {
|
|
44
44
|
files: string[];
|
|
45
45
|
}>;
|
|
46
|
+
export declare const markdownConfigDecoder: d.Decoder<unknown, {
|
|
47
|
+
path: string;
|
|
48
|
+
}>;
|
|
46
49
|
export declare const literalKeyPartDecoder: d.Decoder<unknown, "filePath" | "featureCode" | "featureTitle" | "groupTitle" | "assertionTitle" | "fileName">;
|
|
47
50
|
export declare const attributeKeyPartDecoder: d.Decoder<unknown, string>;
|
|
48
51
|
export declare const testReportConfigDecoder: d.Decoder<unknown, {
|
|
@@ -59,6 +62,9 @@ export declare const configDecoder: d.Decoder<unknown, Partial<{
|
|
|
59
62
|
reportPath: string;
|
|
60
63
|
keys: string[];
|
|
61
64
|
};
|
|
65
|
+
markdown: {
|
|
66
|
+
path: string;
|
|
67
|
+
};
|
|
62
68
|
}> & {
|
|
63
69
|
api: {
|
|
64
70
|
host: string;
|
|
@@ -73,7 +79,8 @@ export declare const configDecoder: d.Decoder<unknown, Partial<{
|
|
|
73
79
|
export type RootConfig = d.TypeOf<typeof configDecoder>;
|
|
74
80
|
export type ApiConfig = d.TypeOf<typeof apiConfigDecoder>;
|
|
75
81
|
export type YmlConfig = d.TypeOf<typeof ymlConfigDecoder>;
|
|
76
|
-
export type
|
|
82
|
+
export type MarkdownConfig = d.TypeOf<typeof markdownConfigDecoder>;
|
|
83
|
+
export type TestConfig = d.TypeOf<typeof testReportConfigDecoder>;
|
|
77
84
|
export type Meta = d.TypeOf<typeof metaDecoder>;
|
|
78
85
|
export type Tree = d.TypeOf<typeof treeDecoder>;
|
|
79
86
|
export type Attribute = d.TypeOf<typeof attributeDecoder>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAGnC,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;EAItB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;GAMtB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;EAG3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAQ5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,gHAOjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,4BASnC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;EAGlC,CAAC;AAEH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AAGnC,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;EAItB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;GAMtB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;EAG3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAQ5B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;EAEhC,CAAC;AAEH,eAAO,MAAM,qBAAqB,gHAOjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,4BASnC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;EAGlC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AACxD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAElE,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.configDecoder = exports.testReportConfigDecoder = exports.attributeKeyPartDecoder = exports.literalKeyPartDecoder = exports.ymlConfigDecoder = exports.apiConfigDecoder = exports.metaDecoder = exports.treeDecoder = exports.attributeDecoder = exports.attributeValueDecoder = void 0;
|
|
3
|
+
exports.configDecoder = exports.testReportConfigDecoder = exports.attributeKeyPartDecoder = exports.literalKeyPartDecoder = exports.markdownConfigDecoder = exports.ymlConfigDecoder = exports.apiConfigDecoder = exports.metaDecoder = exports.treeDecoder = exports.attributeDecoder = exports.attributeValueDecoder = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const function_1 = require("fp-ts/lib/function");
|
|
6
6
|
const d = tslib_1.__importStar(require("io-ts/Decoder"));
|
|
@@ -36,6 +36,9 @@ exports.ymlConfigDecoder = d.intersect(d.struct({
|
|
|
36
36
|
}))(d.partial({
|
|
37
37
|
metaPath: d.string,
|
|
38
38
|
}));
|
|
39
|
+
exports.markdownConfigDecoder = d.struct({
|
|
40
|
+
path: d.string
|
|
41
|
+
});
|
|
39
42
|
exports.literalKeyPartDecoder = d.literal("featureTitle", "featureCode", "groupTitle", "assertionTitle", "fileName", "filePath");
|
|
40
43
|
exports.attributeKeyPartDecoder = (0, function_1.pipe)(d.string, d.parse((str) => {
|
|
41
44
|
if (/^[@$]/.test(str)) {
|
|
@@ -54,5 +57,6 @@ exports.configDecoder = d.intersect(d.struct({
|
|
|
54
57
|
projectPath: d.string,
|
|
55
58
|
jest: exports.testReportConfigDecoder,
|
|
56
59
|
JUnit: exports.testReportConfigDecoder,
|
|
60
|
+
markdown: exports.markdownConfigDecoder,
|
|
57
61
|
}));
|
|
58
62
|
//# sourceMappingURL=models.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":";;;;AAAA,iDAA0C;AAC1C,yDAAmC;AAEnC,OAAO;AACM,QAAA,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;CAChB,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,6BAAqB,CAAC;CACvC,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CAC9B,CAAC,CAAC;AAEU,QAAA,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM;IACf,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAgB,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAW,CAAC;CAC5B,CAAC,CAAC;AAEH,SAAS;AACI,QAAA,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,OAAO,EAAE,CAAC,CAAC,MAAM;CAClB,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,CAAC,CAAC,SAAS,CACzC,CAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CACzB,CAAC,CACH,CACC,CAAC,CAAC,OAAO,CAAC;IACR,QAAQ,EAAE,CAAC,CAAC,MAAM;CACnB,CAAC,CACH,CAAC;AAEW,QAAA,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAC5C,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,UAAU,CACX,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,eAAI,EACzC,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACd,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;KAC9B;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;AACrD,CAAC,CAAC,CACH,CAAC;AAEW,QAAA,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,6BAAqB,EAAE,+BAAuB,CAAC,CAAC;CACvE,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,CAAC,CAAC,SAAS,CACtC,CAAC,CAAC,MAAM,CAAC;IACP,GAAG,EAAE,wBAAgB;IACrB,GAAG,EAAE,wBAAgB;CACtB,CAAC,CACH,CACC,CAAC,CAAC,OAAO,CAAC;IACR,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,IAAI,EAAE,+BAAuB;IAC7B,KAAK,EAAE,+BAAuB;
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/lib/config/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-index.d.ts","sourceRoot":"","sources":["../../../src/lib/markdown/build-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,WAAW,EAAQ,MAAM,WAAW,CAAC;AAwBvD,eAAO,MAAM,UAAU,gBACR,WAAW,WACf,IAAI,MAAM,EAAE,MAAM,CAAC,KAC3B,MAGF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildIndex = void 0;
|
|
4
|
+
const featureToLink = (feature, path) => {
|
|
5
|
+
return `[[${path} | ${feature.title} ( ${feature.code} ) ]]`;
|
|
6
|
+
};
|
|
7
|
+
const linearIndex = (projectData, pathMap) => {
|
|
8
|
+
let result = '# Содержание \r\n\r\n';
|
|
9
|
+
const sortedFeatures = [...projectData.features].sort((a, b) => a.code.localeCompare(b.code));
|
|
10
|
+
for (const feature of sortedFeatures) {
|
|
11
|
+
const path = pathMap.get(`$${feature.code}`);
|
|
12
|
+
if (path) {
|
|
13
|
+
result += `- ${featureToLink(feature, path)} \r\n\r\n`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
17
|
+
};
|
|
18
|
+
const buildIndex = (projectData, pathMap) => {
|
|
19
|
+
return linearIndex(projectData, pathMap);
|
|
20
|
+
// ToDo: сделать построение индекса по деревьям
|
|
21
|
+
};
|
|
22
|
+
exports.buildIndex = buildIndex;
|
|
23
|
+
//# sourceMappingURL=build-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-index.js","sourceRoot":"","sources":["../../../src/lib/markdown/build-index.ts"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAU,EAAE;IAC/D,OAAO,KAAK,IAAI,MAAM,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,IAAI,OAAO,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,WAAwB,EACxB,OAA4B,EAC5B,EAAE;IACF,IAAI,MAAM,GAAG,uBAAuB,CAAC;IACrC,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7D,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7B,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,IAAI,EAAE;YACR,MAAM,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;SACxD;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,UAAU,GAAG,CACxB,WAAwB,EACxB,OAA4B,EACpB,EAAE;IACV,OAAO,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,+CAA+C;AACjD,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-to-markdown.d.ts","sourceRoot":"","sources":["../../../src/lib/markdown/feature-to-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAS1D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.featureToMarkdown = void 0;
|
|
4
|
+
function mdFeatureTitle(feature) {
|
|
5
|
+
let result = `# ${feature.title} ( ${feature.code} )\r\n\r\n`;
|
|
6
|
+
if (feature.description) {
|
|
7
|
+
result += `${feature.description.trim()}\r\n\r\n`;
|
|
8
|
+
}
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
function mdFeatureGroupTitle(groupTitle) {
|
|
12
|
+
return `## ${groupTitle.trim()}\r\n\r\n`;
|
|
13
|
+
}
|
|
14
|
+
function mdDescriptionToQuote(description) {
|
|
15
|
+
const quotedNewLines = description.trim().replace(/\n/g, '\n> ');
|
|
16
|
+
return `> ${quotedNewLines}`;
|
|
17
|
+
}
|
|
18
|
+
function mdFeatureAssertion(assertion, description) {
|
|
19
|
+
let result = `- ${assertion.trim()}\r\n\r\n`;
|
|
20
|
+
if (description) {
|
|
21
|
+
result += `${mdDescriptionToQuote(description)}\r\n\r\n`;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
function mdFeatureGroup(assertionGroup) {
|
|
26
|
+
let result = '';
|
|
27
|
+
result += mdFeatureGroupTitle(assertionGroup.title);
|
|
28
|
+
assertionGroup.assertions.forEach((assertion) => {
|
|
29
|
+
result += mdFeatureAssertion(assertion.title, assertion.description);
|
|
30
|
+
});
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
function featureToMarkdown(feature) {
|
|
34
|
+
let result = '';
|
|
35
|
+
result += mdFeatureTitle(feature);
|
|
36
|
+
feature.groups.forEach((group) => {
|
|
37
|
+
result += mdFeatureGroup(group);
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
exports.featureToMarkdown = featureToMarkdown;
|
|
42
|
+
//# sourceMappingURL=feature-to-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-to-markdown.js","sourceRoot":"","sources":["../../../src/lib/markdown/feature-to-markdown.ts"],"names":[],"mappings":";;;AAEA,SAAS,cAAc,CAAC,OAAgB;IACtC,IAAI,MAAM,GAAG,KAAK,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,IAAI,YAAY,CAAC;IAC9D,IAAG,OAAO,CAAC,WAAW,EAAE;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC;KACnD;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,OAAO,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;AAC3C,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjE,OAAO,KAAK,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB,EAAE,WAAoB;IACjE,IAAI,MAAM,GAAG,KAAK,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;IAC7C,IAAI,WAAW,EAAE;QACf,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC;KAC1D;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,cAA8B;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,IAAI,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpD,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC9C,MAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAgB;IAChD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,8CASC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/markdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAoBxC,eAAO,MAAM,cAAc,gBACZ,WAAW,QAClB,MAAM,kBA0Bb,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exportMarkdown = void 0;
|
|
4
|
+
const validator_1 = require("../validators/validator");
|
|
5
|
+
const build_index_1 = require("./build-index");
|
|
6
|
+
const feature_to_markdown_1 = require("./feature-to-markdown");
|
|
7
|
+
const promises_1 = require("fs/promises");
|
|
8
|
+
const replaceInternalLinks = (markdown, pathMap) => {
|
|
9
|
+
const re = new RegExp(validator_1.LINK_LIKE);
|
|
10
|
+
return markdown.replace(re, (link) => {
|
|
11
|
+
const path = pathMap.get(link);
|
|
12
|
+
if (path) {
|
|
13
|
+
return `[[${path} | ${link}]]`;
|
|
14
|
+
}
|
|
15
|
+
return link;
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
const exportMarkdown = async (projectData, path) => {
|
|
19
|
+
const featureCodeToPath = new Map();
|
|
20
|
+
for (const feature of projectData.features) {
|
|
21
|
+
const featurePath = feature.filePath.slice(0, feature.filePath.lastIndexOf('.'));
|
|
22
|
+
featureCodeToPath.set(`$${feature.code}`, featurePath + '.md');
|
|
23
|
+
}
|
|
24
|
+
for (const feature of projectData.features) {
|
|
25
|
+
const markDown = replaceInternalLinks((0, feature_to_markdown_1.featureToMarkdown)(feature), featureCodeToPath);
|
|
26
|
+
const filePath = feature.filePath.slice(0, feature.filePath.lastIndexOf('.')) + '.md';
|
|
27
|
+
const exportPath = `${path}/${filePath}`;
|
|
28
|
+
const exportDirectory = exportPath.slice(0, exportPath.lastIndexOf('/'));
|
|
29
|
+
await (0, promises_1.mkdir)(exportDirectory, { recursive: true });
|
|
30
|
+
await (0, promises_1.writeFile)(exportPath, markDown);
|
|
31
|
+
}
|
|
32
|
+
if (featureCodeToPath.size > 0) {
|
|
33
|
+
(0, promises_1.writeFile)(`${path}/index.md`, (0, build_index_1.buildIndex)(projectData, featureCodeToPath));
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.exportMarkdown = exportMarkdown;
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/markdown/index.ts"],"names":[],"mappings":";;;AACA,uDAAoD;AACpD,+CAA2C;AAC3C,+DAA0D;AAC1D,0CAA+C;AAE/C,MAAM,oBAAoB,GAAG,CAC3B,QAAgB,EAChB,OAA4B,EAC5B,EAAE;IACF,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,qBAAS,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAG,IAAI,EAAE;YACP,OAAO,KAAK,IAAI,MAAM,IAAI,IAAI,CAAA;SAC/B;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,WAAwB,EACxB,IAAY,EACZ,EAAE;IACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CACxC,CAAC,EACD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAClC,CAAC;QACF,iBAAiB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;KAChE;IAED,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC1C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAA,uCAAiB,EAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAErF,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QACvE,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;QACzC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzE,MAAM,IAAA,gBAAK,EAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;KACvC;IAED,IAAG,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE;QAC7B,IAAA,oBAAS,EAAC,GAAG,IAAI,WAAW,EAAE,IAAA,wBAAU,EAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;KAC3E;AACH,CAAC,CAAC;AA5BW,QAAA,cAAc,kBA4BzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProjectData } from '../domain';
|
|
2
2
|
import { LoaderError } from './models';
|
|
3
|
+
export declare const LINK_LIKE: RegExp;
|
|
3
4
|
export declare class Validator {
|
|
4
5
|
private readonly loaderErrors;
|
|
5
6
|
private readonly metaErrors;
|
|
@@ -16,7 +17,7 @@ export declare class Validator {
|
|
|
16
17
|
private validateMetaTrees;
|
|
17
18
|
private validateFeatures;
|
|
18
19
|
private validateFeature;
|
|
19
|
-
private
|
|
20
|
+
private validateAssertions;
|
|
20
21
|
private validateFeatureLinks;
|
|
21
22
|
private validateLinks;
|
|
22
23
|
private validateCode;
|
|
@@ -1 +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;
|
|
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;AAKlB,eAAO,MAAM,SAAS,QAAuC,CAAC;AAE9D,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,kBAAkB;IAsB1B,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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLoaderError = exports.Validator = void 0;
|
|
3
|
+
exports.getLoaderError = exports.Validator = exports.LINK_LIKE = void 0;
|
|
4
4
|
const models_1 = require("./models");
|
|
5
5
|
const renderer_1 = require("./renderer");
|
|
6
6
|
const CODE_REGEX = /^[A-Za-z][A-Za-z0-9-_]*$/;
|
|
7
7
|
// named group <link> is used to capture and validate link key
|
|
8
|
-
|
|
8
|
+
exports.LINK_LIKE = /\$(?<link>[A-Za-z][A-Za-z0-9-_]*)/g;
|
|
9
9
|
class Validator {
|
|
10
10
|
constructor() {
|
|
11
11
|
this.loaderErrors = new Array();
|
|
@@ -202,10 +202,10 @@ class Validator {
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
|
-
errors.push(...this.
|
|
205
|
+
errors.push(...this.validateAssertions(feature));
|
|
206
206
|
return errors;
|
|
207
207
|
}
|
|
208
|
-
|
|
208
|
+
validateAssertions(feature) {
|
|
209
209
|
const errors = new Array();
|
|
210
210
|
for (const assertionGroup of feature.groups) {
|
|
211
211
|
const assertionsUnique = new Set();
|
|
@@ -243,7 +243,7 @@ class Validator {
|
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
validateLinks(value, field, feature, featuresMap) {
|
|
246
|
-
const re = new RegExp(LINK_LIKE);
|
|
246
|
+
const re = new RegExp(exports.LINK_LIKE);
|
|
247
247
|
const errors = new Array();
|
|
248
248
|
let match;
|
|
249
249
|
while ((match = re.exec(value)) !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/lib/validators/validator.ts"],"names":[],"mappings":";;;AAGA,qCAiBkB;AAClB,yCAAqD;AAErD,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC9C,8DAA8D;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/lib/validators/validator.ts"],"names":[],"mappings":"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"}
|