@application-kit/acceptance 0.0.0-stage → 0.1.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/CHANGELOG.md +13 -0
- package/dist/cjs/bin/application-scenarios.d.ts +2 -0
- package/dist/cjs/bin/application-scenarios.js +15 -0
- package/dist/cjs/bin/index.d.ts +1 -0
- package/dist/cjs/bin/index.js +17 -0
- package/dist/cjs/cadence/index.d.ts +1 -0
- package/dist/cjs/cadence/index.js +17 -0
- package/dist/cjs/cadence/resolve-cadence.d.ts +8 -0
- package/dist/cjs/cadence/resolve-cadence.js +18 -0
- package/dist/cjs/environments/environment.interface.d.ts +5 -0
- package/dist/cjs/environments/environment.interface.js +2 -0
- package/dist/cjs/environments/index.d.ts +3 -0
- package/dist/cjs/environments/index.js +19 -0
- package/dist/cjs/environments/resolve-environment.d.ts +10 -0
- package/dist/cjs/environments/resolve-environment.js +20 -0
- package/dist/cjs/environments/secrets.d.ts +4 -0
- package/dist/cjs/environments/secrets.js +14 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/scenarios/acceptance-class.d.ts +26 -0
- package/dist/cjs/scenarios/acceptance-class.js +100 -0
- package/dist/cjs/scenarios/board.d.ts +6 -0
- package/dist/cjs/scenarios/board.js +98 -0
- package/dist/cjs/scenarios/classes.d.ts +16 -0
- package/dist/cjs/scenarios/classes.js +48 -0
- package/dist/cjs/scenarios/classify.d.ts +35 -0
- package/dist/cjs/scenarios/classify.js +110 -0
- package/dist/cjs/scenarios/config.d.ts +17 -0
- package/dist/cjs/scenarios/config.js +67 -0
- package/dist/cjs/scenarios/coverage-data.d.ts +53 -0
- package/dist/cjs/scenarios/coverage-data.js +118 -0
- package/dist/cjs/scenarios/coverage-json.d.ts +2 -0
- package/dist/cjs/scenarios/coverage-json.js +94 -0
- package/dist/cjs/scenarios/coverage-open.d.ts +16 -0
- package/dist/cjs/scenarios/coverage-open.js +76 -0
- package/dist/cjs/scenarios/coverage-page.d.ts +2 -0
- package/dist/cjs/scenarios/coverage-page.js +108 -0
- package/dist/cjs/scenarios/coverage-removed.d.ts +13 -0
- package/dist/cjs/scenarios/coverage-removed.js +30 -0
- package/dist/cjs/scenarios/coverage.d.ts +26 -0
- package/dist/cjs/scenarios/coverage.js +91 -0
- package/dist/cjs/scenarios/dates.d.ts +8 -0
- package/dist/cjs/scenarios/dates.js +93 -0
- package/dist/cjs/scenarios/declared.d.ts +18 -0
- package/dist/cjs/scenarios/declared.js +69 -0
- package/dist/cjs/scenarios/features.d.ts +13 -0
- package/dist/cjs/scenarios/features.js +112 -0
- package/dist/cjs/scenarios/gherkin.d.ts +10 -0
- package/dist/cjs/scenarios/gherkin.js +75 -0
- package/dist/cjs/scenarios/git.d.ts +15 -0
- package/dist/cjs/scenarios/git.js +83 -0
- package/dist/cjs/scenarios/index.d.ts +27 -0
- package/dist/cjs/scenarios/index.js +43 -0
- package/dist/cjs/scenarios/inventory.d.ts +8 -0
- package/dist/cjs/scenarios/inventory.js +55 -0
- package/dist/cjs/scenarios/links.d.ts +4 -0
- package/dist/cjs/scenarios/links.js +99 -0
- package/dist/cjs/scenarios/lint-inputs.d.ts +12 -0
- package/dist/cjs/scenarios/lint-inputs.js +118 -0
- package/dist/cjs/scenarios/lint.d.ts +8 -0
- package/dist/cjs/scenarios/lint.js +94 -0
- package/dist/cjs/scenarios/projects.d.ts +21 -0
- package/dist/cjs/scenarios/projects.js +115 -0
- package/dist/cjs/scenarios/python-text.d.ts +11 -0
- package/dist/cjs/scenarios/python-text.js +95 -0
- package/dist/cjs/scenarios/remote.d.ts +6 -0
- package/dist/cjs/scenarios/remote.js +29 -0
- package/dist/cjs/scenarios/removed-list.d.ts +15 -0
- package/dist/cjs/scenarios/removed-list.js +62 -0
- package/dist/cjs/scenarios/report.d.ts +6 -0
- package/dist/cjs/scenarios/report.js +10 -0
- package/dist/cjs/scenarios/run.d.ts +10 -0
- package/dist/cjs/scenarios/run.js +145 -0
- package/dist/cjs/scenarios/task-links.d.ts +15 -0
- package/dist/cjs/scenarios/task-links.js +54 -0
- package/dist/esm/bin/application-scenarios.d.ts +2 -0
- package/dist/esm/bin/application-scenarios.js +10 -0
- package/dist/esm/bin/index.d.ts +1 -0
- package/dist/esm/bin/index.js +1 -0
- package/dist/esm/cadence/index.d.ts +1 -0
- package/dist/esm/cadence/index.js +1 -0
- package/dist/esm/cadence/resolve-cadence.d.ts +8 -0
- package/dist/esm/cadence/resolve-cadence.js +14 -0
- package/dist/esm/environments/environment.interface.d.ts +5 -0
- package/dist/esm/environments/environment.interface.js +1 -0
- package/dist/esm/environments/index.d.ts +3 -0
- package/dist/esm/environments/index.js +3 -0
- package/dist/esm/environments/resolve-environment.d.ts +10 -0
- package/dist/esm/environments/resolve-environment.js +16 -0
- package/dist/esm/environments/secrets.d.ts +4 -0
- package/dist/esm/environments/secrets.js +9 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/scenarios/acceptance-class.d.ts +26 -0
- package/dist/esm/scenarios/acceptance-class.js +93 -0
- package/dist/esm/scenarios/board.d.ts +6 -0
- package/dist/esm/scenarios/board.js +92 -0
- package/dist/esm/scenarios/classes.d.ts +16 -0
- package/dist/esm/scenarios/classes.js +42 -0
- package/dist/esm/scenarios/classify.d.ts +35 -0
- package/dist/esm/scenarios/classify.js +106 -0
- package/dist/esm/scenarios/config.d.ts +17 -0
- package/dist/esm/scenarios/config.js +58 -0
- package/dist/esm/scenarios/coverage-data.d.ts +53 -0
- package/dist/esm/scenarios/coverage-data.js +109 -0
- package/dist/esm/scenarios/coverage-json.d.ts +2 -0
- package/dist/esm/scenarios/coverage-json.js +90 -0
- package/dist/esm/scenarios/coverage-open.d.ts +16 -0
- package/dist/esm/scenarios/coverage-open.js +71 -0
- package/dist/esm/scenarios/coverage-page.d.ts +2 -0
- package/dist/esm/scenarios/coverage-page.js +104 -0
- package/dist/esm/scenarios/coverage-removed.d.ts +13 -0
- package/dist/esm/scenarios/coverage-removed.js +26 -0
- package/dist/esm/scenarios/coverage.d.ts +26 -0
- package/dist/esm/scenarios/coverage.js +84 -0
- package/dist/esm/scenarios/dates.d.ts +8 -0
- package/dist/esm/scenarios/dates.js +87 -0
- package/dist/esm/scenarios/declared.d.ts +18 -0
- package/dist/esm/scenarios/declared.js +62 -0
- package/dist/esm/scenarios/features.d.ts +13 -0
- package/dist/esm/scenarios/features.js +96 -0
- package/dist/esm/scenarios/gherkin.d.ts +10 -0
- package/dist/esm/scenarios/gherkin.js +68 -0
- package/dist/esm/scenarios/git.d.ts +15 -0
- package/dist/esm/scenarios/git.js +72 -0
- package/dist/esm/scenarios/index.d.ts +27 -0
- package/dist/esm/scenarios/index.js +27 -0
- package/dist/esm/scenarios/inventory.d.ts +8 -0
- package/dist/esm/scenarios/inventory.js +48 -0
- package/dist/esm/scenarios/links.d.ts +4 -0
- package/dist/esm/scenarios/links.js +95 -0
- package/dist/esm/scenarios/lint-inputs.d.ts +12 -0
- package/dist/esm/scenarios/lint-inputs.js +110 -0
- package/dist/esm/scenarios/lint.d.ts +8 -0
- package/dist/esm/scenarios/lint.js +89 -0
- package/dist/esm/scenarios/projects.d.ts +21 -0
- package/dist/esm/scenarios/projects.js +104 -0
- package/dist/esm/scenarios/python-text.d.ts +11 -0
- package/dist/esm/scenarios/python-text.js +81 -0
- package/dist/esm/scenarios/remote.d.ts +6 -0
- package/dist/esm/scenarios/remote.js +24 -0
- package/dist/esm/scenarios/removed-list.d.ts +15 -0
- package/dist/esm/scenarios/removed-list.js +57 -0
- package/dist/esm/scenarios/report.d.ts +6 -0
- package/dist/esm/scenarios/report.js +6 -0
- package/dist/esm/scenarios/run.d.ts +10 -0
- package/dist/esm/scenarios/run.js +141 -0
- package/dist/esm/scenarios/task-links.d.ts +15 -0
- package/dist/esm/scenarios/task-links.js +50 -0
- package/package.json +65 -3
- package/README.md +0 -3
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { parseArgs } from 'node:util';
|
|
2
|
+
import { classesCommand } from './classes.js';
|
|
3
|
+
import { ConfigError, loadConfig } from './config.js';
|
|
4
|
+
import { coverageCommand } from './coverage.js';
|
|
5
|
+
import { localToday, periodOf } from './dates.js';
|
|
6
|
+
import { inventoryCommand } from './inventory.js';
|
|
7
|
+
import { linksCommand } from './links.js';
|
|
8
|
+
import { lintCommand, removedCommand } from './lint.js';
|
|
9
|
+
import { parseRevisions } from './projects.js';
|
|
10
|
+
import { messageOf } from './python-text.js';
|
|
11
|
+
import { formatReport } from './report.js';
|
|
12
|
+
const usage = `usage: scenarios [--config <файл>] <команда>
|
|
13
|
+
lint [--list-json <файл>] [--unused-steps <файл>]
|
|
14
|
+
removed --base <ref>
|
|
15
|
+
links --projects <каталог> [--ref <проект>=<ref>]…
|
|
16
|
+
classes --projects <каталог> [--ref <проект>=<ref>]… [--list]
|
|
17
|
+
coverage --projects <каталог> [--ref <проект>=<ref>]… [--since <дата>] [--until <дата>]
|
|
18
|
+
[--out <файл.html>] [--json <файл.json>]
|
|
19
|
+
inventory --out <файл.json> [--story <файл>]…
|
|
20
|
+
Коды возврата: 0 — дефектов нет; 1 — есть дефекты; 2 — ошибка вызова или конфига.
|
|
21
|
+
`;
|
|
22
|
+
const text = { type: 'string' };
|
|
23
|
+
const defaultConfig = 'scenarios.config.json';
|
|
24
|
+
const configPrefix = '--config=';
|
|
25
|
+
const flagErrorCode = 'ERR_PARSE_ARGS';
|
|
26
|
+
const projectOptions = { projects: text, ref: { multiple: true, type: 'string' } };
|
|
27
|
+
const commandOptions = {
|
|
28
|
+
classes: { ...projectOptions, list: { type: 'boolean' } },
|
|
29
|
+
coverage: { ...projectOptions, json: text, out: text, since: text, until: text },
|
|
30
|
+
inventory: { out: text, story: { multiple: true, type: 'string' } },
|
|
31
|
+
links: projectOptions,
|
|
32
|
+
lint: { 'list-json': text, 'unused-steps': text },
|
|
33
|
+
removed: { base: text },
|
|
34
|
+
};
|
|
35
|
+
const requiredOptions = {
|
|
36
|
+
classes: ['projects'],
|
|
37
|
+
coverage: ['projects'],
|
|
38
|
+
inventory: ['out'],
|
|
39
|
+
links: ['projects'],
|
|
40
|
+
lint: [],
|
|
41
|
+
removed: ['base'],
|
|
42
|
+
};
|
|
43
|
+
class UsageError extends Error {
|
|
44
|
+
name = 'UsageError';
|
|
45
|
+
}
|
|
46
|
+
const optional = (values, name) => {
|
|
47
|
+
const value = values[name];
|
|
48
|
+
return typeof value === 'string' ? value : undefined;
|
|
49
|
+
};
|
|
50
|
+
const required = (values, name) => {
|
|
51
|
+
const value = optional(values, name);
|
|
52
|
+
if (value === undefined) {
|
|
53
|
+
throw new UsageError(`нужен --${name}`);
|
|
54
|
+
}
|
|
55
|
+
return value;
|
|
56
|
+
};
|
|
57
|
+
const projectInput = async (context, config, values) => {
|
|
58
|
+
const projects = required(values, 'projects');
|
|
59
|
+
const items = Array.isArray(values.ref) ? values.ref.map(String) : [];
|
|
60
|
+
const revisions = await parseRevisions(context.cwd, projects, items);
|
|
61
|
+
return { config, cwd: context.cwd, projects, revisions };
|
|
62
|
+
};
|
|
63
|
+
const coverage = async (context, config, values) => {
|
|
64
|
+
const today = localToday(context.now);
|
|
65
|
+
const period = periodOf({ since: optional(values, 'since'), today, until: optional(values, 'until') });
|
|
66
|
+
const input = await projectInput(context, config, values);
|
|
67
|
+
return coverageCommand(input, { json: optional(values, 'json'), out: optional(values, 'out'), period, today });
|
|
68
|
+
};
|
|
69
|
+
const handlers = {
|
|
70
|
+
classes: async (context, config, values) => {
|
|
71
|
+
const input = await projectInput(context, config, values);
|
|
72
|
+
return classesCommand(input, values.list === true);
|
|
73
|
+
},
|
|
74
|
+
coverage,
|
|
75
|
+
inventory: async (context, config, values) => inventoryCommand(context.cwd, config, {
|
|
76
|
+
out: required(values, 'out'),
|
|
77
|
+
stories: Array.isArray(values.story) ? values.story.map(String) : [],
|
|
78
|
+
}),
|
|
79
|
+
links: async (context, config, values) => linksCommand(config, await projectInput(context, config, values)),
|
|
80
|
+
lint: async (context, config, values) => lintCommand(context.cwd, config, {
|
|
81
|
+
listJson: optional(values, 'list-json'),
|
|
82
|
+
unusedSteps: optional(values, 'unused-steps'),
|
|
83
|
+
}),
|
|
84
|
+
removed: async (context, config, values) => removedCommand(context.cwd, config, required(values, 'base')),
|
|
85
|
+
};
|
|
86
|
+
const isCommand = (name) => Object.hasOwn(commandOptions, name);
|
|
87
|
+
const inlineConfig = (first, argv) => {
|
|
88
|
+
const isInline = first?.startsWith(configPrefix) === true;
|
|
89
|
+
return isInline ? [first.slice(configPrefix.length), argv.slice(1)] : [defaultConfig, argv];
|
|
90
|
+
};
|
|
91
|
+
const splitGlobal = (argv) => {
|
|
92
|
+
const [first, second] = argv;
|
|
93
|
+
return first === '--config' && second !== undefined ? [second, argv.slice(2)] : inlineConfig(first, argv);
|
|
94
|
+
};
|
|
95
|
+
const commandOf = (name) => {
|
|
96
|
+
if (!isCommand(name)) {
|
|
97
|
+
throw new UsageError(name === '' ? 'нужна команда' : `команды «${name}» нет`);
|
|
98
|
+
}
|
|
99
|
+
return name;
|
|
100
|
+
};
|
|
101
|
+
const parseCommand = (argv) => {
|
|
102
|
+
const [configFile, rest] = splitGlobal(argv);
|
|
103
|
+
const [name = '', ...options] = rest;
|
|
104
|
+
const command = commandOf(name);
|
|
105
|
+
const parsed = parseArgs({ allowPositionals: false, args: options, options: commandOptions[command], strict: true });
|
|
106
|
+
const { values } = parsed;
|
|
107
|
+
const names = requiredOptions[command];
|
|
108
|
+
for (const option of names) {
|
|
109
|
+
required(values, option);
|
|
110
|
+
}
|
|
111
|
+
return { command, configFile, values };
|
|
112
|
+
};
|
|
113
|
+
const codeOf = (error) => String(Reflect.get(new Object(error), 'code'));
|
|
114
|
+
const isUsageError = (error) => error instanceof UsageError || codeOf(error).startsWith(flagErrorCode);
|
|
115
|
+
const failure = (error) => {
|
|
116
|
+
if (error instanceof ConfigError) {
|
|
117
|
+
return { code: 2, stderr: `ошибка: ${error.message}\n`, stdout: '' };
|
|
118
|
+
}
|
|
119
|
+
if (isUsageError(error)) {
|
|
120
|
+
return { code: 2, stderr: `${usage}ошибка вызова: ${messageOf(error)}\n`, stdout: '' };
|
|
121
|
+
}
|
|
122
|
+
throw error;
|
|
123
|
+
};
|
|
124
|
+
const isHelp = (argv) => argv.includes('--help') || argv.includes('-h');
|
|
125
|
+
const execute = async (argv, context) => {
|
|
126
|
+
const { command, configFile, values } = parseCommand(argv);
|
|
127
|
+
const config = await loadConfig(configFile, context.cwd);
|
|
128
|
+
const report = await handlers[command](context, config, values);
|
|
129
|
+
return { code: report.defects.length > 0 ? 1 : 0, stderr: '', stdout: formatReport(report) };
|
|
130
|
+
};
|
|
131
|
+
export const runScenarios = async (argv, context) => {
|
|
132
|
+
if (isHelp(argv)) {
|
|
133
|
+
return { code: 0, stderr: '', stdout: usage };
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
return await execute(argv, context);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
return failure(error);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ProjectsInputInterface } from './projects.js';
|
|
2
|
+
export interface LinkRowInterface {
|
|
3
|
+
readonly file: string;
|
|
4
|
+
readonly line: number;
|
|
5
|
+
readonly project: string;
|
|
6
|
+
readonly status: string;
|
|
7
|
+
readonly text: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ReadProjectsInterface {
|
|
10
|
+
readonly notes: readonly string[];
|
|
11
|
+
readonly rows: readonly LinkRowInterface[];
|
|
12
|
+
readonly sources: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export declare const linkToken: RegExp;
|
|
15
|
+
export declare const readProjects: (input: ProjectsInputInterface) => Promise<ReadProjectsInterface>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ConfigError } from './config.js';
|
|
2
|
+
import { readText, walkFiles } from './features.js';
|
|
3
|
+
import { runGit, stdoutText } from './git.js';
|
|
4
|
+
import { projectStatuses, sourceOf, storyKey, walkProjects } from './projects.js';
|
|
5
|
+
import { splitLines } from './python-text.js';
|
|
6
|
+
export const linkToken = /@(?<project>[\da-z][\d\-a-z]*):AC-[\d\-.A-Za-z]*[\dA-Za-z]/gu;
|
|
7
|
+
const linkGrep = '@[a-z0-9][a-z0-9-]*:AC-';
|
|
8
|
+
const hasLink = (text) => text.match(linkToken) !== null;
|
|
9
|
+
const fileLines = async (cwd, file) => {
|
|
10
|
+
const text = await readText(cwd, file);
|
|
11
|
+
return splitLines(text).flatMap((line, index) => (hasLink(line) ? [[file, index + 1, line]] : []));
|
|
12
|
+
};
|
|
13
|
+
const ownTaskLines = async (cwd) => {
|
|
14
|
+
const files = await walkFiles(cwd, 'tasks', '.md');
|
|
15
|
+
const lines = await Promise.all(files.map(async (file) => fileLines(cwd, file)));
|
|
16
|
+
return lines.flat();
|
|
17
|
+
};
|
|
18
|
+
const splitGrepLine = (line) => {
|
|
19
|
+
const first = line.indexOf(':');
|
|
20
|
+
const second = line.indexOf(':', first + 1);
|
|
21
|
+
const file = line.slice(0, first);
|
|
22
|
+
return second === -1 || !file.endsWith('.md')
|
|
23
|
+
? []
|
|
24
|
+
: [[file, Number(line.slice(first + 1, second)), line.slice(second + 1)]];
|
|
25
|
+
};
|
|
26
|
+
const revisionTaskLines = async (cwd, project, revision) => {
|
|
27
|
+
const done = await runGit({ cwd, repo: project.repo }, ['grep', '-n', '-I', '-E', linkGrep, revision, '--', 'tasks']);
|
|
28
|
+
if (done.code > 1 || done.code < 0) {
|
|
29
|
+
throw new ConfigError(`git grep в ${project.repo} на ${revision} не прошёл: ${done.stderr.trim()}`);
|
|
30
|
+
}
|
|
31
|
+
return splitLines(stdoutText(done))
|
|
32
|
+
.flatMap((line) => splitGrepLine(line.slice(revision.length + 1)));
|
|
33
|
+
};
|
|
34
|
+
const taskLines = async (cwd, project) => (project.revision === undefined ? ownTaskLines(cwd) : revisionTaskLines(cwd, project, project.revision));
|
|
35
|
+
const projectRows = async (cwd, project) => {
|
|
36
|
+
const statuses = await projectStatuses(cwd, project);
|
|
37
|
+
const lines = await taskLines(cwd, project);
|
|
38
|
+
return lines.map(([file, line, text]) => ({
|
|
39
|
+
file,
|
|
40
|
+
line,
|
|
41
|
+
project: project.name,
|
|
42
|
+
status: statuses.get(storyKey(file)) ?? '',
|
|
43
|
+
text,
|
|
44
|
+
}));
|
|
45
|
+
};
|
|
46
|
+
export const readProjects = async (input) => {
|
|
47
|
+
const walk = await walkProjects(input);
|
|
48
|
+
const rows = await Promise.all(walk.projects.map(async (project) => projectRows(input.cwd, project)));
|
|
49
|
+
return { notes: walk.notes, rows: rows.flat(), sources: walk.projects.map((project) => sourceOf(project)) };
|
|
50
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,68 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@application-kit/acceptance",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Инструмент репозитория приёмочных тестов: команда application-scenarios (lint, removed, links, classes, coverage, inventory) по feature-файлам и story проектов, каденс прогона, реестр окружений и чтение учётных данных окружения",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"acceptance",
|
|
7
|
+
"bdd",
|
|
8
|
+
"gherkin",
|
|
9
|
+
"playwright"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://gitlab.com/application-kit/application-kit/-/tree/main/packages/acceptance",
|
|
12
|
+
"bugs": "https://gitlab.com/application-kit/application-kit/-/issues",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://gitlab.com/application-kit/application-kit.git",
|
|
16
|
+
"directory": "packages/acceptance"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": {
|
|
20
|
+
"name": "application-kit"
|
|
21
|
+
},
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"type": "module",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"import": {
|
|
27
|
+
"types": "./dist/esm/index.d.ts",
|
|
28
|
+
"default": "./dist/esm/index.js"
|
|
29
|
+
},
|
|
30
|
+
"require": {
|
|
31
|
+
"types": "./dist/cjs/index.d.ts",
|
|
32
|
+
"default": "./dist/cjs/index.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"./package.json": "./package.json"
|
|
36
|
+
},
|
|
37
|
+
"main": "./dist/cjs/index.js",
|
|
38
|
+
"module": "./dist/esm/index.js",
|
|
39
|
+
"types": "./dist/cjs/index.d.ts",
|
|
40
|
+
"bin": {
|
|
41
|
+
"application-scenarios": "./dist/esm/bin/application-scenarios.js"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "rm -rf ./dist && node ../../scripts/barrels.mjs create ./src --entry-only=bin,scenarios && tsc --project tsconfig.build.json && tsc --project tsconfig.build.cjs.json && node ../../scripts/barrels.mjs clean ./src && node ../../scripts/mark-cjs.mjs ./dist/cjs",
|
|
48
|
+
"lint:tsc": "tsc --noEmit --pretty --project .",
|
|
49
|
+
"test:mutation": "stryker run",
|
|
50
|
+
"test:unit": "vitest run"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"yaml": "^2.9.0"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@stryker-mutator/core": "^10.0.0",
|
|
57
|
+
"@stryker-mutator/vitest-runner": "^10.0.0",
|
|
58
|
+
"@types/node": "^26.2.0",
|
|
59
|
+
"typescript": "^6.0.3",
|
|
60
|
+
"vitest": "^5.0.0"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=24"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public"
|
|
67
|
+
}
|
|
6
68
|
}
|
package/README.md
DELETED