spec-controller 0.1.73 → 0.1.75
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/dist/THIRD-PARTY-LICENSES.txt +382 -0
- package/dist/cli.js +28998 -3
- package/package.json +6 -3
- package/LICENSE +0 -21
- package/dist/cli-allocate/cli.d.ts +0 -2
- package/dist/cli-allocate/cli.d.ts.map +0 -1
- package/dist/cli-allocate/cli.js +0 -63
- package/dist/cli-allocate/cli.js.map +0 -1
- package/dist/cli-allocate/readHistory.d.ts +0 -14
- package/dist/cli-allocate/readHistory.d.ts.map +0 -1
- package/dist/cli-allocate/readHistory.js +0 -109
- package/dist/cli-allocate/readHistory.js.map +0 -1
- package/dist/cli-allocate/readParts.d.ts +0 -2
- package/dist/cli-allocate/readParts.d.ts.map +0 -1
- package/dist/cli-allocate/readParts.js +0 -26
- package/dist/cli-allocate/readParts.js.map +0 -1
- package/dist/cli-allocate/readTree.d.ts +0 -5
- package/dist/cli-allocate/readTree.d.ts.map +0 -1
- package/dist/cli-allocate/readTree.js +0 -74
- package/dist/cli-allocate/readTree.js.map +0 -1
- package/dist/cli-allocate/refStore.d.ts +0 -2
- package/dist/cli-allocate/refStore.d.ts.map +0 -1
- package/dist/cli-allocate/refStore.js +0 -35
- package/dist/cli-allocate/refStore.js.map +0 -1
- package/dist/cli-allocate/request.d.ts +0 -9
- package/dist/cli-allocate/request.d.ts.map +0 -1
- package/dist/cli-allocate/request.js +0 -23
- package/dist/cli-allocate/request.js.map +0 -1
- package/dist/cli-allocate/stderr.d.ts +0 -7
- package/dist/cli-allocate/stderr.d.ts.map +0 -1
- package/dist/cli-allocate/stderr.js +0 -32
- package/dist/cli-allocate/stderr.js.map +0 -1
- package/dist/cli-allocate/unreadable.d.ts +0 -19
- package/dist/cli-allocate/unreadable.d.ts.map +0 -1
- package/dist/cli-allocate/unreadable.js +0 -47
- package/dist/cli-allocate/unreadable.js.map +0 -1
- package/dist/cli-args.d.ts +0 -18
- package/dist/cli-args.d.ts.map +0 -1
- package/dist/cli-args.js +0 -196
- package/dist/cli-args.js.map +0 -1
- package/dist/cli-balance/cli.d.ts +0 -10
- package/dist/cli-balance/cli.d.ts.map +0 -1
- package/dist/cli-balance/cli.js +0 -163
- package/dist/cli-balance/cli.js.map +0 -1
- package/dist/cli-balance/corpusDir.d.ts +0 -3
- package/dist/cli-balance/corpusDir.d.ts.map +0 -1
- package/dist/cli-balance/corpusDir.js +0 -14
- package/dist/cli-balance/corpusDir.js.map +0 -1
- package/dist/cli-balance/emit/format.d.ts +0 -39
- package/dist/cli-balance/emit/format.d.ts.map +0 -1
- package/dist/cli-balance/emit/format.js +0 -59
- package/dist/cli-balance/emit/format.js.map +0 -1
- package/dist/cli-balance/emit/writer.d.ts +0 -13
- package/dist/cli-balance/emit/writer.d.ts.map +0 -1
- package/dist/cli-balance/emit/writer.js +0 -73
- package/dist/cli-balance/emit/writer.js.map +0 -1
- package/dist/cli-balance/evidenceInputs.d.ts +0 -136
- package/dist/cli-balance/evidenceInputs.d.ts.map +0 -1
- package/dist/cli-balance/evidenceInputs.js +0 -125
- package/dist/cli-balance/evidenceInputs.js.map +0 -1
- package/dist/cli-balance/exitStatus.d.ts +0 -4
- package/dist/cli-balance/exitStatus.d.ts.map +0 -1
- package/dist/cli-balance/exitStatus.js +0 -18
- package/dist/cli-balance/exitStatus.js.map +0 -1
- package/dist/cli-balance/inputsRead.d.ts +0 -11
- package/dist/cli-balance/inputsRead.d.ts.map +0 -1
- package/dist/cli-balance/inputsRead.js +0 -51
- package/dist/cli-balance/inputsRead.js.map +0 -1
- package/dist/cli-balance/reRender.d.ts +0 -8
- package/dist/cli-balance/reRender.d.ts.map +0 -1
- package/dist/cli-balance/reRender.js +0 -23
- package/dist/cli-balance/reRender.js.map +0 -1
- package/dist/cli-balance/unreadableInputs.d.ts +0 -52
- package/dist/cli-balance/unreadableInputs.d.ts.map +0 -1
- package/dist/cli-balance/unreadableInputs.js +0 -118
- package/dist/cli-balance/unreadableInputs.js.map +0 -1
- package/dist/cli-registry.d.ts +0 -36
- package/dist/cli-registry.d.ts.map +0 -1
- package/dist/cli-registry.js +0 -147
- package/dist/cli-registry.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/crashGuards.d.ts +0 -18
- package/dist/crashGuards.d.ts.map +0 -1
- package/dist/crashGuards.js +0 -81
- package/dist/crashGuards.js.map +0 -1
- package/dist/defaultCorpus.d.ts +0 -2
- package/dist/defaultCorpus.d.ts.map +0 -1
- package/dist/defaultCorpus.js +0 -2
- package/dist/defaultCorpus.js.map +0 -1
- package/dist/exitCode.d.ts +0 -21
- package/dist/exitCode.d.ts.map +0 -1
- package/dist/exitCode.js +0 -30
- package/dist/exitCode.js.map +0 -1
- package/dist/host.d.ts +0 -19
- package/dist/host.d.ts.map +0 -1
- package/dist/host.js +0 -119
- package/dist/host.js.map +0 -1
- package/dist/ingest/ciSourcePaths.d.ts +0 -8
- package/dist/ingest/ciSourcePaths.d.ts.map +0 -1
- package/dist/ingest/ciSourcePaths.js +0 -20
- package/dist/ingest/ciSourcePaths.js.map +0 -1
- package/dist/ingest/ingestQualityChecks.d.ts +0 -41
- package/dist/ingest/ingestQualityChecks.d.ts.map +0 -1
- package/dist/ingest/ingestQualityChecks.js +0 -105
- package/dist/ingest/ingestQualityChecks.js.map +0 -1
- package/dist/ingest/ingestScenarios.d.ts +0 -16
- package/dist/ingest/ingestScenarios.d.ts.map +0 -1
- package/dist/ingest/ingestScenarios.js +0 -61
- package/dist/ingest/ingestScenarios.js.map +0 -1
- package/dist/ingest/inputReading.d.ts +0 -12
- package/dist/ingest/inputReading.d.ts.map +0 -1
- package/dist/ingest/inputReading.js +0 -28
- package/dist/ingest/inputReading.js.map +0 -1
- package/dist/ingest/inputShapes.d.ts +0 -18
- package/dist/ingest/inputShapes.d.ts.map +0 -1
- package/dist/ingest/inputShapes.js +0 -135
- package/dist/ingest/inputShapes.js.map +0 -1
- package/dist/ingest/junitReportPaths.d.ts +0 -3
- package/dist/ingest/junitReportPaths.d.ts.map +0 -1
- package/dist/ingest/junitReportPaths.js +0 -16
- package/dist/ingest/junitReportPaths.js.map +0 -1
- package/dist/ingest/junitXml.d.ts +0 -4
- package/dist/ingest/junitXml.d.ts.map +0 -1
- package/dist/ingest/junitXml.js +0 -22
- package/dist/ingest/junitXml.js.map +0 -1
- package/dist/ingest/reportReading.d.ts +0 -20
- package/dist/ingest/reportReading.d.ts.map +0 -1
- package/dist/ingest/reportReading.js +0 -28
- package/dist/ingest/reportReading.js.map +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -107
- package/dist/main.js.map +0 -1
- package/dist/messages.d.ts +0 -242
- package/dist/messages.d.ts.map +0 -1
- package/dist/messages.js +0 -343
- package/dist/messages.js.map +0 -1
- package/dist/outputLocation.d.ts +0 -23
- package/dist/outputLocation.d.ts.map +0 -1
- package/dist/outputLocation.js +0 -139
- package/dist/outputLocation.js.map +0 -1
- package/dist/run-management/keptRun.d.ts +0 -55
- package/dist/run-management/keptRun.d.ts.map +0 -1
- package/dist/run-management/keptRun.js +0 -93
- package/dist/run-management/keptRun.js.map +0 -1
- package/dist/run-management/resolveRunInputs.d.ts +0 -17
- package/dist/run-management/resolveRunInputs.d.ts.map +0 -1
- package/dist/run-management/resolveRunInputs.js +0 -137
- package/dist/run-management/resolveRunInputs.js.map +0 -1
- package/dist/storedRun.d.ts +0 -6
- package/dist/storedRun.d.ts.map +0 -1
- package/dist/storedRun.js +0 -27
- package/dist/storedRun.js.map +0 -1
package/dist/host.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { asksForHelp, equalsFormRefusal, givenTwiceRefusal, givenValue, isEqualsForm, missingValueRefusal, valueFlagsOf, } from "./cli-args.js";
|
|
2
|
-
import { cliRegistry } from "./cli-registry.js";
|
|
3
|
-
import { APP_MESSAGES, AppMessage } from "./messages.js";
|
|
4
|
-
import { USAGE_EXIT_CODE } from "./exitCode.js";
|
|
5
|
-
export function parseHostInvocation(argv, globalFlags = cliRegistry.global, commands = cliRegistry.commands.map((command) => command.name)) {
|
|
6
|
-
const read = readHostTokens(argv, globalFlags, commands);
|
|
7
|
-
const help = argv.slice(0, hostTokenCount(argv, read)).find((token) => TOP_LEVEL_HELP.has(token));
|
|
8
|
-
return help === undefined ? read : { command: help, commandArgs: [] };
|
|
9
|
-
}
|
|
10
|
-
function hostTokenCount(argv, read) {
|
|
11
|
-
if (read.refusal !== undefined || read.command === undefined)
|
|
12
|
-
return argv.length;
|
|
13
|
-
return argv.length - read.commandArgs.length - 1;
|
|
14
|
-
}
|
|
15
|
-
function readHostTokens(argv, globalFlags, commands) {
|
|
16
|
-
const modifiers = valueFlagsOf(globalFlags);
|
|
17
|
-
const values = new Map();
|
|
18
|
-
let i = 0;
|
|
19
|
-
for (; i < argv.length; i++) {
|
|
20
|
-
const token = argv[i] ?? "";
|
|
21
|
-
const modifier = modifiers.get(token);
|
|
22
|
-
if (modifier === undefined) {
|
|
23
|
-
const refusal = leadingFlagRefusal(token, modifiers, globalFlags);
|
|
24
|
-
if (refusal !== undefined)
|
|
25
|
-
return { commandArgs: [], refusal };
|
|
26
|
-
break;
|
|
27
|
-
}
|
|
28
|
-
const read = readModifier(token, modifier, argv.slice(i + 1, i + 3), { values, commands });
|
|
29
|
-
if ("refusal" in read)
|
|
30
|
-
return { commandArgs: [], refusal: read.refusal };
|
|
31
|
-
values.set(modifier.name, read.value);
|
|
32
|
-
i++;
|
|
33
|
-
}
|
|
34
|
-
if (i === argv.length && values.size > 0)
|
|
35
|
-
return { commandArgs: [], refusal: noCommandRefusal([...values.keys()]) };
|
|
36
|
-
return {
|
|
37
|
-
store: values.get("--store"),
|
|
38
|
-
runId: values.get("--run-id"),
|
|
39
|
-
command: argv[i],
|
|
40
|
-
commandArgs: argv.slice(i + 1),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
function readModifier(token, modifier, [next, after], read) {
|
|
44
|
-
if (read.values.has(modifier.name))
|
|
45
|
-
return { refusal: givenTwiceRefusal(token, "spec-controller") };
|
|
46
|
-
const value = givenValue(next);
|
|
47
|
-
if (value === undefined)
|
|
48
|
-
return { refusal: missingValueRefusal(token, modifier, "spec-controller") };
|
|
49
|
-
if (read.commands.includes(value) && (after === undefined || after.startsWith("-"))) {
|
|
50
|
-
return { refusal: commandAsValueRefusal(token, modifier, value) };
|
|
51
|
-
}
|
|
52
|
-
return { value };
|
|
53
|
-
}
|
|
54
|
-
function noCommandRefusal(given) {
|
|
55
|
-
return (`${APP_MESSAGES[AppMessage.NoCommandAfterModifiers](given.join(", "))}\n` +
|
|
56
|
-
APP_MESSAGES[AppMessage.SeeCommandsAndModifiers]());
|
|
57
|
-
}
|
|
58
|
-
function commandAsValueRefusal(token, modifier, command) {
|
|
59
|
-
return (`${APP_MESSAGES[AppMessage.ModifierTookCommand](token, command)}\n` +
|
|
60
|
-
`${APP_MESSAGES[AppMessage.GiveModifierItsOwnValue](token, modifier.arg, command)} ` +
|
|
61
|
-
APP_MESSAGES[AppMessage.SeeCommandsAndModifiers]());
|
|
62
|
-
}
|
|
63
|
-
function leadingFlagRefusal(token, modifiers, globalFlags) {
|
|
64
|
-
if (isEqualsForm(token))
|
|
65
|
-
return equalsFormRefusal(token, modifiers, "spec-controller");
|
|
66
|
-
if (isFlagOutOfPlace(token))
|
|
67
|
-
return flagBeforeCommandRefusal(token, globalFlags);
|
|
68
|
-
return undefined;
|
|
69
|
-
}
|
|
70
|
-
const TOP_LEVEL_HELP = new Set(["--help", "-h"]);
|
|
71
|
-
function isFlagOutOfPlace(token) {
|
|
72
|
-
return token.length > 1 && token.startsWith("-") && !TOP_LEVEL_HELP.has(token);
|
|
73
|
-
}
|
|
74
|
-
function flagBeforeCommandRefusal(flag, globalFlags) {
|
|
75
|
-
const modifiers = globalFlags.map((modifier) => modifier.name).join(", ");
|
|
76
|
-
return `${APP_MESSAGES[AppMessage.FlagBeforeCommand](flag, modifiers)}\n${APP_MESSAGES[AppMessage.SeeCommandsAndModifiers]()}`;
|
|
77
|
-
}
|
|
78
|
-
export function wrapCommandArgv(commandArgs, formatSpecs) {
|
|
79
|
-
return [...commandArgs, ...formatSpecs.flatMap((spec) => ["--format", spec])];
|
|
80
|
-
}
|
|
81
|
-
export function peekFlag(argv, name) {
|
|
82
|
-
const flag = `--${name}`;
|
|
83
|
-
for (let i = 0; i < argv.length; i++) {
|
|
84
|
-
if (argv[i] === flag) {
|
|
85
|
-
const value = argv[i + 1];
|
|
86
|
-
return value !== undefined && !value.startsWith("--") ? value : undefined;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
export function answerUnknownCommand(command, help) {
|
|
92
|
-
return {
|
|
93
|
-
exitCode: USAGE_EXIT_CODE,
|
|
94
|
-
stderr: `spec-controller: ${APP_MESSAGES[AppMessage.UnknownCommand](command)}\n\n${help}\n`,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
export function modifiersNotTakenRefusal(inv, commands = cliRegistry.commands) {
|
|
98
|
-
const entry = commands.find((command) => command.name === inv.command);
|
|
99
|
-
if (entry?.acceptsHostModifiers !== false || asksForHelp(inv.commandArgs))
|
|
100
|
-
return undefined;
|
|
101
|
-
const given = [inv.store === undefined ? [] : ["--store"], inv.runId === undefined ? [] : ["--run-id"]].flat();
|
|
102
|
-
if (given.length === 0)
|
|
103
|
-
return undefined;
|
|
104
|
-
return (`${APP_MESSAGES[AppMessage.HostUsageError](APP_MESSAGES[AppMessage.ModifiersNotTaken](entry.name, given.join(", ")))}\n` +
|
|
105
|
-
APP_MESSAGES[AppMessage.RunWithoutModifiers](entry.name));
|
|
106
|
-
}
|
|
107
|
-
export function formatFilePaths(argv) {
|
|
108
|
-
const paths = [];
|
|
109
|
-
argv.forEach((token, index) => {
|
|
110
|
-
const value = argv[index + 1];
|
|
111
|
-
if (token !== "--format" || value === undefined)
|
|
112
|
-
return;
|
|
113
|
-
const colon = value.indexOf(":");
|
|
114
|
-
if (colon !== -1)
|
|
115
|
-
paths.push(value.slice(colon + 1));
|
|
116
|
-
});
|
|
117
|
-
return paths;
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface CiPathReader {
|
|
2
|
-
exists(path: string): boolean;
|
|
3
|
-
isDirectory(path: string): boolean;
|
|
4
|
-
readDir(path: string): string[];
|
|
5
|
-
}
|
|
6
|
-
export declare const NODE_CI_PATH_READER: CiPathReader;
|
|
7
|
-
export declare function ciSourcePathsOf(ciPath: string, reader?: CiPathReader): string[];
|
|
8
|
-
//# sourceMappingURL=ciSourcePaths.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ciSourcePaths.d.ts","sourceRoot":"","sources":["../../src/ingest/ciSourcePaths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACjC;AAED,eAAO,MAAM,mBAAmB,EAAE,YAIjC,CAAC;AAIF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,YAAkC,GACzC,MAAM,EAAE,CAQV"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
export const NODE_CI_PATH_READER = {
|
|
4
|
-
exists: existsSync,
|
|
5
|
-
isDirectory: (path) => statSync(path).isDirectory(),
|
|
6
|
-
readDir: readdirSync,
|
|
7
|
-
};
|
|
8
|
-
const WORKFLOW_EXTENSIONS = [".yml", ".yaml"];
|
|
9
|
-
export function ciSourcePathsOf(ciPath, reader = NODE_CI_PATH_READER) {
|
|
10
|
-
if (!reader.exists(ciPath))
|
|
11
|
-
return [];
|
|
12
|
-
if (!reader.isDirectory(ciPath))
|
|
13
|
-
return [ciPath];
|
|
14
|
-
return reader
|
|
15
|
-
.readDir(ciPath)
|
|
16
|
-
.filter((name) => WORKFLOW_EXTENSIONS.some((ext) => name.endsWith(ext)))
|
|
17
|
-
.sort()
|
|
18
|
-
.map((name) => join(ciPath, name));
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=ciSourcePaths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ciSourcePaths.js","sourceRoot":"","sources":["../../src/ingest/ciSourcePaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;IACnD,OAAO,EAAE,WAAW;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,SAAuB,mBAAmB;IAE1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM;SACV,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;SACvE,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { type ReadFault } from "./inputReading.js";
|
|
2
|
-
import { type ParsedFeatureFile, type ParsedWorkflow, type SourceFault } from "@3f-consulting/spec-controller-core";
|
|
3
|
-
import type { EvidenceObservation, EvidenceReconciliation } from "@3f-consulting/spec-controller-core";
|
|
4
|
-
export declare const DEFAULT_CI_PATH = ".github/workflows";
|
|
5
|
-
export declare const DEFAULT_PACKAGE_JSON = "package.json";
|
|
6
|
-
type ParsedCorpus = {
|
|
7
|
-
readonly kind: "unparseable";
|
|
8
|
-
readonly faults: readonly SourceFault[];
|
|
9
|
-
} | {
|
|
10
|
-
readonly kind: "read";
|
|
11
|
-
readonly corpus: readonly ParsedFeatureFile[];
|
|
12
|
-
};
|
|
13
|
-
export type CorpusReading = ParsedCorpus | ReadFault;
|
|
14
|
-
export declare function readCorpus(featuresDir: string): CorpusReading;
|
|
15
|
-
type ParsedWorkflows = {
|
|
16
|
-
readonly kind: "unparseable";
|
|
17
|
-
readonly faults: readonly SourceFault[];
|
|
18
|
-
} | {
|
|
19
|
-
readonly kind: "read";
|
|
20
|
-
readonly workflows: readonly ParsedWorkflow[];
|
|
21
|
-
};
|
|
22
|
-
export type WorkflowReading = ParsedWorkflows | ReadFault;
|
|
23
|
-
export declare function readWorkflows(ciPath: string | undefined, read?: (path: string) => string): WorkflowReading;
|
|
24
|
-
export declare function featureNamesOf(corpus: readonly ParsedFeatureFile[]): Map<string, string>;
|
|
25
|
-
declare const OBSERVATION_READERS: {
|
|
26
|
-
vitest: (report: unknown, root: string) => EvidenceObservation[];
|
|
27
|
-
pytest: (report: unknown) => EvidenceObservation[];
|
|
28
|
-
jest: (report: unknown, root: string) => EvidenceObservation[];
|
|
29
|
-
junit: (report: unknown) => EvidenceObservation[];
|
|
30
|
-
rspec: (report: unknown, root: string) => EvidenceObservation[];
|
|
31
|
-
cucumber: (report: unknown, root: string) => EvidenceObservation[];
|
|
32
|
-
};
|
|
33
|
-
type ObservationReader = keyof typeof OBSERVATION_READERS;
|
|
34
|
-
export type EvidenceReader = ObservationReader | "package-manifest" | "ci-step-record";
|
|
35
|
-
export interface EvidenceReport {
|
|
36
|
-
readonly reader: EvidenceReader;
|
|
37
|
-
readonly document: unknown;
|
|
38
|
-
}
|
|
39
|
-
export declare function runReconcile(reports: readonly EvidenceReport[], root: string, corpus: readonly ParsedFeatureFile[], workflows: readonly ParsedWorkflow[]): EvidenceReconciliation;
|
|
40
|
-
export {};
|
|
41
|
-
//# sourceMappingURL=ingestQualityChecks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingestQualityChecks.d.ts","sourceRoot":"","sources":["../../src/ingest/ingestQualityChecks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEnB,KAAK,WAAW,EACjB,MAAM,qCAAqC,CAAC;AAqB7C,OAAO,KAAK,EAEV,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;AAW7C,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAWnD,KAAK,YAAY,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAWrD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAE7D;AAED,KAAK,eAAe,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,SAAS,CAAC;AA6B1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAiB,GAAG,eAAe,CAGpH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxF;AAED,QAAA,MAAM,mBAAmB;;;;;;;CAOqE,CAAC;AAE/F,KAAK,iBAAiB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAsBD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,iBAAiB,EAAE,EACpC,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,sBAAsB,CAYxB"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { basename } from "node:path";
|
|
2
|
-
import { ciSourcePathsOf } from "./ciSourcePaths.js";
|
|
3
|
-
import { readingOf, readUtf8 } from "./inputReading.js";
|
|
4
|
-
import { corpusPathOf, MissingFeatureCorpusError, readFeatureSources, slugOf } from "./ingestScenarios.js";
|
|
5
|
-
import { parseFeatureCorpus, parseWorkflows, } from "@3f-consulting/spec-controller-core";
|
|
6
|
-
import { BUILT_IN_DEFERRAL_TAGS } from "@3f-consulting/spec-controller-core";
|
|
7
|
-
import { parseVitestEvidenceObservations, } from "@3f-consulting/spec-controller-core";
|
|
8
|
-
import { parseJunitEvidenceObservations, parsePytestEvidenceObservations, } from "@3f-consulting/spec-controller-core";
|
|
9
|
-
import { parseRspecEvidenceObservations, } from "@3f-consulting/spec-controller-core";
|
|
10
|
-
import { parseCucumberEvidenceObservations, } from "@3f-consulting/spec-controller-core";
|
|
11
|
-
import { evidenceReconciliationFromSources } from "@3f-consulting/spec-controller-core";
|
|
12
|
-
const VITEST_QUALITY_CHECK = "unit";
|
|
13
|
-
const PYTEST_QUALITY_CHECK = "unit";
|
|
14
|
-
const JEST_QUALITY_CHECK = "unit";
|
|
15
|
-
const JUNIT_QUALITY_CHECK = "unit";
|
|
16
|
-
const RSPEC_QUALITY_CHECK = "unit";
|
|
17
|
-
const CUCUMBER_QUALITY_CHECK = "integration";
|
|
18
|
-
const RECONCILER_INVOCATION = "spec-controller balance";
|
|
19
|
-
export const DEFAULT_CI_PATH = ".github/workflows";
|
|
20
|
-
export const DEFAULT_PACKAGE_JSON = "package.json";
|
|
21
|
-
function sourcesOf(featuresDir) {
|
|
22
|
-
try {
|
|
23
|
-
return readFeatureSources(featuresDir);
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
if (err instanceof MissingFeatureCorpusError)
|
|
27
|
-
return [];
|
|
28
|
-
throw err;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function parsedCorpusOf(featuresDir, files) {
|
|
32
|
-
const parse = parseFeatureCorpus(files.map(({ relativePath, source }) => ({ file: relativePath, source })));
|
|
33
|
-
if (parse.kind === "parsed")
|
|
34
|
-
return { kind: "read", corpus: parse.parsed };
|
|
35
|
-
return {
|
|
36
|
-
kind: "unparseable",
|
|
37
|
-
faults: parse.faults.map(({ file, message }) => ({ file: corpusPathOf(featuresDir, file), message })),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
export function readCorpus(featuresDir) {
|
|
41
|
-
return readingOf(featuresDir, () => sourcesOf(featuresDir), (files) => parsedCorpusOf(featuresDir, files));
|
|
42
|
-
}
|
|
43
|
-
function readWorkflowSource(path, read) {
|
|
44
|
-
try {
|
|
45
|
-
return { file: basename(path), source: read(path) };
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
const errno = err;
|
|
49
|
-
errno.path ??= path;
|
|
50
|
-
throw err;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function workflowSourcesOf(path, read) {
|
|
54
|
-
const paths = ciSourcePathsOf(path);
|
|
55
|
-
return { paths, sources: paths.map((source) => readWorkflowSource(source, read)) };
|
|
56
|
-
}
|
|
57
|
-
function parsedWorkflowsOf({ paths, sources }) {
|
|
58
|
-
const parse = parseWorkflows(sources);
|
|
59
|
-
if (parse.kind === "parsed")
|
|
60
|
-
return { kind: "read", workflows: parse.parsed };
|
|
61
|
-
const pathOf = new Map(paths.map((read) => [basename(read), read]));
|
|
62
|
-
return { kind: "unparseable", faults: parse.faults.map(({ file, message }) => ({ file: pathOf.get(file) ?? file, message })) };
|
|
63
|
-
}
|
|
64
|
-
export function readWorkflows(ciPath, read = readUtf8) {
|
|
65
|
-
const path = ciPath ?? DEFAULT_CI_PATH;
|
|
66
|
-
return readingOf(path, () => workflowSourcesOf(path, read), parsedWorkflowsOf);
|
|
67
|
-
}
|
|
68
|
-
export function featureNamesOf(corpus) {
|
|
69
|
-
const map = new Map();
|
|
70
|
-
for (const { featureCode, file } of corpus) {
|
|
71
|
-
if (featureCode !== null)
|
|
72
|
-
map.set(featureCode, slugOf(file));
|
|
73
|
-
}
|
|
74
|
-
return map;
|
|
75
|
-
}
|
|
76
|
-
const OBSERVATION_READERS = {
|
|
77
|
-
vitest: (report, root) => parseVitestEvidenceObservations(report, VITEST_QUALITY_CHECK, root),
|
|
78
|
-
pytest: (report) => parsePytestEvidenceObservations(report, PYTEST_QUALITY_CHECK),
|
|
79
|
-
jest: (report, root) => parseVitestEvidenceObservations(report, JEST_QUALITY_CHECK, root),
|
|
80
|
-
junit: (report) => parseJunitEvidenceObservations(report, JUNIT_QUALITY_CHECK),
|
|
81
|
-
rspec: (report, root) => parseRspecEvidenceObservations(report, RSPEC_QUALITY_CHECK, root),
|
|
82
|
-
cucumber: (report, root) => parseCucumberEvidenceObservations(report, CUCUMBER_QUALITY_CHECK, root),
|
|
83
|
-
};
|
|
84
|
-
function isObservationReader(reader) {
|
|
85
|
-
return Object.hasOwn(OBSERVATION_READERS, reader);
|
|
86
|
-
}
|
|
87
|
-
function observationsOf(reports, root) {
|
|
88
|
-
return reports.flatMap(({ reader, document }) => (isObservationReader(reader) ? OBSERVATION_READERS[reader](document, root) : []));
|
|
89
|
-
}
|
|
90
|
-
function documentReadBy(reports, reader) {
|
|
91
|
-
return reports.find((report) => report.reader === reader)?.document;
|
|
92
|
-
}
|
|
93
|
-
export function runReconcile(reports, root, corpus, workflows) {
|
|
94
|
-
const packageJson = documentReadBy(reports, "package-manifest") ?? {};
|
|
95
|
-
return evidenceReconciliationFromSources({
|
|
96
|
-
features: corpus,
|
|
97
|
-
packageJson,
|
|
98
|
-
ciWorkflows: workflows,
|
|
99
|
-
ciStepRecord: documentReadBy(reports, "ci-step-record"),
|
|
100
|
-
behaviouralObservations: observationsOf(reports, root),
|
|
101
|
-
deferralTags: BUILT_IN_DEFERRAL_TAGS,
|
|
102
|
-
reconcilerInvocation: RECONCILER_INVOCATION,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=ingestQualityChecks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingestQualityChecks.js","sourceRoot":"","sources":["../../src/ingest/ingestQualityChecks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export declare class MissingFeatureCorpusError extends Error {
|
|
2
|
-
readonly directory: string;
|
|
3
|
-
constructor(directory: string);
|
|
4
|
-
}
|
|
5
|
-
export interface CorpusFeatureFile {
|
|
6
|
-
path: string;
|
|
7
|
-
relativePath: string;
|
|
8
|
-
}
|
|
9
|
-
export declare function corpusPathOf(dir: string, relativePath: string): string;
|
|
10
|
-
export declare function slugOf(relativePath: string): string;
|
|
11
|
-
export declare function corpusFeatureFiles(dir: string): CorpusFeatureFile[];
|
|
12
|
-
export interface FeatureFileSource extends CorpusFeatureFile {
|
|
13
|
-
readonly source: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function readFeatureSources(dir: string): FeatureFileSource[];
|
|
16
|
-
//# sourceMappingURL=ingestScenarios.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingestScenarios.d.ts","sourceRoot":"","sources":["../../src/ingest/ingestScenarios.ts"],"names":[],"mappings":"AAKA,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAK9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AA0BD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAInE;AAYD,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAEnE"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { readFileSync, readdirSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { APP_MESSAGES, AppMessage } from "../messages.js";
|
|
4
|
-
export class MissingFeatureCorpusError extends Error {
|
|
5
|
-
directory;
|
|
6
|
-
constructor(directory) {
|
|
7
|
-
super(APP_MESSAGES[AppMessage.FeatureCorpusDirectoryMissing](directory));
|
|
8
|
-
this.name = "MissingFeatureCorpusError";
|
|
9
|
-
this.directory = directory;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
function entriesOf(dir) {
|
|
13
|
-
return readdirSync(dir, { withFileTypes: true });
|
|
14
|
-
}
|
|
15
|
-
function corpusEntries(dir) {
|
|
16
|
-
try {
|
|
17
|
-
return entriesOf(dir);
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
if (err.code === "ENOENT")
|
|
21
|
-
throw new MissingFeatureCorpusError(dir);
|
|
22
|
-
throw err;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// Dirent.isDirectory() is false for a symlink, so a symlinked directory is never entered.
|
|
26
|
-
function featureFilesUnder(dir, prefix, entries) {
|
|
27
|
-
return entries.flatMap((entry) => {
|
|
28
|
-
const relativePath = `${prefix}${entry.name}`;
|
|
29
|
-
if (entry.name.endsWith(".feature"))
|
|
30
|
-
return [relativePath];
|
|
31
|
-
if (!entry.isDirectory())
|
|
32
|
-
return [];
|
|
33
|
-
const subdirectory = join(dir, entry.name);
|
|
34
|
-
return featureFilesUnder(subdirectory, `${relativePath}/`, entriesOf(subdirectory));
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
export function corpusPathOf(dir, relativePath) {
|
|
38
|
-
return join(dir, relativePath);
|
|
39
|
-
}
|
|
40
|
-
export function slugOf(relativePath) {
|
|
41
|
-
return relativePath.slice(0, -".feature".length);
|
|
42
|
-
}
|
|
43
|
-
export function corpusFeatureFiles(dir) {
|
|
44
|
-
return featureFilesUnder(dir, "", corpusEntries(dir))
|
|
45
|
-
.sort()
|
|
46
|
-
.map((relativePath) => ({ path: corpusPathOf(dir, relativePath), relativePath }));
|
|
47
|
-
}
|
|
48
|
-
function readFeatureSource(path) {
|
|
49
|
-
try {
|
|
50
|
-
return readFileSync(path, "utf8");
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
const errno = err;
|
|
54
|
-
errno.path ??= path;
|
|
55
|
-
throw err;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
export function readFeatureSources(dir) {
|
|
59
|
-
return corpusFeatureFiles(dir).map(({ path, relativePath }) => ({ path, relativePath, source: readFeatureSource(path) }));
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=ingestScenarios.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingestScenarios.js","sourceRoot":"","sources":["../../src/ingest/ingestScenarios.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface InputReadFault {
|
|
2
|
-
readonly path: string;
|
|
3
|
-
readonly reason: string;
|
|
4
|
-
}
|
|
5
|
-
export interface ReadFault {
|
|
6
|
-
readonly kind: "read-fault";
|
|
7
|
-
readonly fault: InputReadFault;
|
|
8
|
-
}
|
|
9
|
-
export declare function readingOf<S, R>(path: string, read: () => S, parse: (sources: S) => R): R | ReadFault;
|
|
10
|
-
export declare function readUtf8(path: string): string;
|
|
11
|
-
export declare function reasonOf(err: unknown): string;
|
|
12
|
-
//# sourceMappingURL=inputReading.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputReading.d.ts","sourceRoot":"","sources":["../../src/ingest/inputReading.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC;AASD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAUpG;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE7C"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
function readFaultOf(err, path) {
|
|
3
|
-
const errno = err;
|
|
4
|
-
if (!(err instanceof Error) || typeof errno.code !== "string")
|
|
5
|
-
return null;
|
|
6
|
-
return { path: errno.path ?? path, reason: err.message };
|
|
7
|
-
}
|
|
8
|
-
// A read the file system refuses is the input's fault, returned as data; any other throw is spec-controller's own.
|
|
9
|
-
export function readingOf(path, read, parse) {
|
|
10
|
-
let sources;
|
|
11
|
-
try {
|
|
12
|
-
sources = read();
|
|
13
|
-
}
|
|
14
|
-
catch (err) {
|
|
15
|
-
const fault = readFaultOf(err, path);
|
|
16
|
-
if (fault === null)
|
|
17
|
-
throw err;
|
|
18
|
-
return { kind: "read-fault", fault };
|
|
19
|
-
}
|
|
20
|
-
return parse(sources);
|
|
21
|
-
}
|
|
22
|
-
export function readUtf8(path) {
|
|
23
|
-
return readFileSync(path, "utf8");
|
|
24
|
-
}
|
|
25
|
-
export function reasonOf(err) {
|
|
26
|
-
return err instanceof Error ? err.message : String(err);
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=inputReading.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputReading.js","sourceRoot":"","sources":["../../src/ingest/inputReading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAYvC,SAAS,WAAW,CAAC,GAAY,EAAE,IAAY;IAC7C,MAAM,KAAK,GAAG,GAA4B,CAAC;IAC3C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3E,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,SAAS,CAAO,IAAY,EAAE,IAAa,EAAE,KAAwB;IACnF,IAAI,OAAU,CAAC;IACf,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export type Shape = "string" | "number" | "boolean" | "anything" | {
|
|
2
|
-
readonly list: Shape;
|
|
3
|
-
} | {
|
|
4
|
-
readonly fields: Readonly<Record<string, Shape>>;
|
|
5
|
-
readonly required?: readonly string[];
|
|
6
|
-
} | {
|
|
7
|
-
readonly entries: Shape;
|
|
8
|
-
readonly keys?: (key: string) => boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare const VITEST_REPORT: Shape;
|
|
11
|
-
export declare const JUNIT_REPORT: Shape;
|
|
12
|
-
export declare const RSPEC_REPORT: Shape;
|
|
13
|
-
export declare const CUCUMBER_REPORT: Shape;
|
|
14
|
-
export declare const CI_STEP_RECORD: Shape;
|
|
15
|
-
export declare const PACKAGE_MANIFEST: Shape;
|
|
16
|
-
export declare const SAVED_RECONCILIATION: Shape;
|
|
17
|
-
export declare function shapeFaultIn(value: unknown, shape: Shape, where?: string): string | null;
|
|
18
|
-
//# sourceMappingURL=inputShapes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputShapes.d.ts","sourceRoot":"","sources":["../../src/ingest/inputShapes.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,KAAK,GACb,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,UAAU,GACV;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,CAAC;AAK1E,eAAO,MAAM,aAAa,EAAE,KAc3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAG5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAsD,CAAC;AAEtF,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAkBF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,SAAK,GAAG,MAAM,GAAG,IAAI,CAUpF"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { featureCodeOf } from "@3f-consulting/spec-controller-core";
|
|
2
|
-
import { APP_MESSAGES, AppMessage } from "../messages.js";
|
|
3
|
-
export const VITEST_REPORT = {
|
|
4
|
-
fields: {
|
|
5
|
-
testResults: {
|
|
6
|
-
list: {
|
|
7
|
-
fields: {
|
|
8
|
-
name: "string",
|
|
9
|
-
status: "string",
|
|
10
|
-
message: "string",
|
|
11
|
-
assertionResults: { list: { fields: { fullName: "string", title: "string", status: "string" } } },
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
required: ["testResults"],
|
|
17
|
-
};
|
|
18
|
-
export const JUNIT_REPORT = {
|
|
19
|
-
fields: {
|
|
20
|
-
testsuites: {
|
|
21
|
-
fields: {
|
|
22
|
-
testsuite: { list: { fields: { testcase: { list: { fields: { classname: "string", name: "string" } } } } } },
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
required: ["testsuites"],
|
|
27
|
-
};
|
|
28
|
-
export const RSPEC_REPORT = {
|
|
29
|
-
fields: {
|
|
30
|
-
examples: {
|
|
31
|
-
list: { fields: { description: "string", full_description: "string", status: "string", file_path: "string" } },
|
|
32
|
-
},
|
|
33
|
-
summary: { fields: { errors_outside_of_examples_count: "number" } },
|
|
34
|
-
messages: { list: "string" },
|
|
35
|
-
},
|
|
36
|
-
required: ["examples", "summary"],
|
|
37
|
-
};
|
|
38
|
-
export const CUCUMBER_REPORT = {
|
|
39
|
-
list: {
|
|
40
|
-
fields: {
|
|
41
|
-
uri: "string",
|
|
42
|
-
name: "string",
|
|
43
|
-
elements: {
|
|
44
|
-
list: {
|
|
45
|
-
fields: {
|
|
46
|
-
tags: { list: { fields: { name: "string" } } },
|
|
47
|
-
steps: { list: { fields: { keyword: "string", name: "string", result: { fields: { status: "string" } } } } },
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
export const CI_STEP_RECORD = {
|
|
55
|
-
entries: { fields: { outcome: "string" } },
|
|
56
|
-
keys: (key) => featureCodeOf(key) !== null,
|
|
57
|
-
};
|
|
58
|
-
export const PACKAGE_MANIFEST = { fields: { scripts: { entries: "string" } } };
|
|
59
|
-
export const SAVED_RECONCILIATION = {
|
|
60
|
-
fields: {
|
|
61
|
-
runProvenance: { fields: { corpus: "string" }, required: ["corpus"] },
|
|
62
|
-
summary: { fields: {} },
|
|
63
|
-
ledger: { fields: { claimReconciliations: { list: "anything" } }, required: ["claimReconciliations"] },
|
|
64
|
-
scenarioCodeErrors: { list: "anything" },
|
|
65
|
-
scenarioCodePopulation: { fields: {} },
|
|
66
|
-
evidenceObligations: { fields: {} },
|
|
67
|
-
metadata: { fields: {} },
|
|
68
|
-
},
|
|
69
|
-
required: ["runProvenance", "summary", "ledger"],
|
|
70
|
-
};
|
|
71
|
-
function kindOf(value) {
|
|
72
|
-
if (value === null)
|
|
73
|
-
return "null";
|
|
74
|
-
if (Array.isArray(value))
|
|
75
|
-
return APP_MESSAGES[AppMessage.ShapeKindList]();
|
|
76
|
-
if (typeof value === "object")
|
|
77
|
-
return APP_MESSAGES[AppMessage.ShapeKindObject]();
|
|
78
|
-
return APP_MESSAGES[AppMessage.ShapeKindOfType](typeof value);
|
|
79
|
-
}
|
|
80
|
-
function expectedKindOf(shape) {
|
|
81
|
-
if (typeof shape === "string")
|
|
82
|
-
return APP_MESSAGES[AppMessage.ShapeKindOfType](shape);
|
|
83
|
-
return "list" in shape ? APP_MESSAGES[AppMessage.ShapeKindList]() : APP_MESSAGES[AppMessage.ShapeKindObject]();
|
|
84
|
-
}
|
|
85
|
-
function pathOf(where, key) {
|
|
86
|
-
return where === "" ? key : `${where}.${key}`;
|
|
87
|
-
}
|
|
88
|
-
export function shapeFaultIn(value, shape, where = "") {
|
|
89
|
-
if (shape === "anything")
|
|
90
|
-
return null;
|
|
91
|
-
const found = kindOf(value);
|
|
92
|
-
const expected = expectedKindOf(shape);
|
|
93
|
-
if (found !== expected)
|
|
94
|
-
return APP_MESSAGES[AppMessage.ShapeWrongKind](where === "" ? APP_MESSAGES[AppMessage.ShapeTopLevel]() : where, found, expected);
|
|
95
|
-
if (typeof shape === "string")
|
|
96
|
-
return null;
|
|
97
|
-
if ("list" in shape)
|
|
98
|
-
return listFault(value, shape.list, where);
|
|
99
|
-
if ("entries" in shape)
|
|
100
|
-
return entriesFault(value, shape, where);
|
|
101
|
-
return fieldsFault(value, shape, where);
|
|
102
|
-
}
|
|
103
|
-
function listFault(items, item, where) {
|
|
104
|
-
for (const [index, value] of items.entries()) {
|
|
105
|
-
const fault = shapeFaultIn(value, item, `${where}[${index}]`);
|
|
106
|
-
if (fault !== null)
|
|
107
|
-
return fault;
|
|
108
|
-
}
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
function fieldsFault(record, shape, where) {
|
|
112
|
-
for (const [key, field] of Object.entries(shape.fields)) {
|
|
113
|
-
const path = pathOf(where, key);
|
|
114
|
-
if (record[key] === undefined) {
|
|
115
|
-
if (shape.required?.includes(key) === true)
|
|
116
|
-
return APP_MESSAGES[AppMessage.ShapeFieldMissing](path);
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
const fault = shapeFaultIn(record[key], field, path);
|
|
120
|
-
if (fault !== null)
|
|
121
|
-
return fault;
|
|
122
|
-
}
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
function entriesFault(record, shape, where) {
|
|
126
|
-
for (const [key, value] of Object.entries(record)) {
|
|
127
|
-
if (shape.keys !== undefined && !shape.keys(key))
|
|
128
|
-
continue;
|
|
129
|
-
const fault = shapeFaultIn(value, shape.entries, pathOf(where, key));
|
|
130
|
-
if (fault !== null)
|
|
131
|
-
return fault;
|
|
132
|
-
}
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=inputShapes.js.map
|