spec-controller 0.1.66 → 0.1.67
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/cli-balance/cli.d.ts +2 -1
- package/dist/cli-balance/cli.d.ts.map +1 -1
- package/dist/cli-balance/cli.js +28 -58
- package/dist/cli-balance/cli.js.map +1 -1
- package/dist/cli-balance/corpusDir.d.ts +1 -1
- package/dist/cli-balance/corpusDir.d.ts.map +1 -1
- package/dist/cli-balance/evidenceInputs.d.ts +2 -3
- package/dist/cli-balance/evidenceInputs.d.ts.map +1 -1
- package/dist/cli-balance/evidenceInputs.js +0 -6
- package/dist/cli-balance/evidenceInputs.js.map +1 -1
- package/dist/cli-balance/reRender.d.ts +1 -1
- package/dist/cli-balance/reRender.d.ts.map +1 -1
- package/dist/cli-balance/reRender.js +2 -2
- package/dist/cli-balance/reRender.js.map +1 -1
- package/dist/cli-balance/unreadableInputs.d.ts +41 -13
- package/dist/cli-balance/unreadableInputs.d.ts.map +1 -1
- package/dist/cli-balance/unreadableInputs.js +37 -64
- package/dist/cli-balance/unreadableInputs.js.map +1 -1
- package/dist/ingest/ingestQualityChecks.d.ts +11 -19
- package/dist/ingest/ingestQualityChecks.d.ts.map +1 -1
- package/dist/ingest/ingestQualityChecks.js +22 -67
- package/dist/ingest/ingestQualityChecks.js.map +1 -1
- package/dist/ingest/inputReading.d.ts +12 -0
- package/dist/ingest/inputReading.d.ts.map +1 -0
- package/dist/ingest/inputReading.js +28 -0
- package/dist/ingest/inputReading.js.map +1 -0
- package/dist/ingest/reportReading.d.ts +20 -0
- package/dist/ingest/reportReading.d.ts.map +1 -0
- package/dist/ingest/reportReading.js +28 -0
- package/dist/ingest/reportReading.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type ReportsReading } from "./unreadableInputs.js";
|
|
1
2
|
export declare function checkLegacyJson(args: Record<string, string>): string | null;
|
|
2
3
|
export declare function sourceTarget(args: Record<string, string>): string;
|
|
3
4
|
export declare function checkInputsExist(args: Record<string, string>, exists: (path: string) => boolean): string | null;
|
|
4
|
-
export declare function checkInputsParse(
|
|
5
|
+
export declare function checkInputsParse(reports: ReportsReading): string | null;
|
|
5
6
|
export declare function runBalance(argv: string[], ownRunDir?: string): boolean;
|
|
6
7
|
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli-balance/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli-balance/cli.ts"],"names":[],"mappings":"AAkBA,OAAO,EAWL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AA2B/B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAK3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAEjE;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAChC,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtE"}
|
package/dist/cli-balance/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import { runReconcile, readCorpus, readWorkflows, featureNamesOf, evidenceObligationsOf, } from "../ingest/ingestQualityChecks.js";
|
|
4
|
-
import { EVIDENCE_INPUTS, inputPathsOf,
|
|
4
|
+
import { EVIDENCE_INPUTS, inputPathsOf, runInputsOf } from "./evidenceInputs.js";
|
|
5
5
|
import { planOutput } from "./emit/format.js";
|
|
6
6
|
import { writeOutputs } from "./emit/writer.js";
|
|
7
7
|
import { namesStdout, refuse, settlingRefusal, stdoutIdentity } from "../outputLocation.js";
|
|
@@ -9,7 +9,8 @@ import { identifiedInputs, inputsReadBy, NODE_INPUT_READER } from "./inputsRead.
|
|
|
9
9
|
import { DEFAULT_FEATURES_DIR } from "../defaultCorpus.js";
|
|
10
10
|
import { corpusDirOf } from "./corpusDir.js";
|
|
11
11
|
import { checkReRenderFlags } from "./reRender.js";
|
|
12
|
-
import { checkInputPaths, checkWorkflowsParse, checkInputShapes, corpusDirRefusal, checkSavedReconciliation, jsonInputsOf,
|
|
12
|
+
import { checkInputPaths, checkWorkflowsParse, checkInputShapes, corpusDirRefusal, checkSavedReconciliation, jsonInputsOf, readReports, reportRefusal, reRenderOrRefusal, savedReportRefusal, } from "./unreadableInputs.js";
|
|
13
|
+
import { readDocument } from "../ingest/reportReading.js";
|
|
13
14
|
import { statusFor } from "./exitStatus.js";
|
|
14
15
|
import { verdictCode, } from "@3f-consulting/spec-controller-core";
|
|
15
16
|
import { resolveSourceSha, resolveTargetOrigin, resolveTargetRoot, resolveToolIdentity } from "../run-management/resolveRunInputs.js";
|
|
@@ -21,9 +22,6 @@ function collectFormatSpecs(argv) {
|
|
|
21
22
|
// checkMissingValues has already refused a --format given no value.
|
|
22
23
|
return argv.flatMap((token, i) => (token === "--format" ? [argv[i + 1]] : []));
|
|
23
24
|
}
|
|
24
|
-
function readText(path) {
|
|
25
|
-
return readFileSync(path, "utf8");
|
|
26
|
-
}
|
|
27
25
|
export function checkLegacyJson(args) {
|
|
28
26
|
if (args["json"] !== undefined) {
|
|
29
27
|
return APP_MESSAGES[AppMessage.LegacyJsonRemoved]();
|
|
@@ -42,36 +40,13 @@ export function checkInputsExist(args, exists) {
|
|
|
42
40
|
}
|
|
43
41
|
return null;
|
|
44
42
|
}
|
|
45
|
-
export function checkInputsParse(
|
|
46
|
-
for (const
|
|
47
|
-
const
|
|
48
|
-
if (
|
|
43
|
+
export function checkInputsParse(reports) {
|
|
44
|
+
for (const file of reports.files) {
|
|
45
|
+
const { reading } = file;
|
|
46
|
+
if (!file.flagged || file.report.format !== "json")
|
|
49
47
|
continue;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
text = read(path);
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
return APP_MESSAGES[AppMessage.CouldNotBeReadAt](APP_MESSAGES[AppMessage.FlaggedFile](`--${flag}`), path, reasonOf(err));
|
|
56
|
-
}
|
|
57
|
-
try {
|
|
58
|
-
JSON.parse(text);
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
return APP_MESSAGES[AppMessage.NotValidJson](APP_MESSAGES[AppMessage.FlaggedReport](`--${flag}`), path, reasonOf(err));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
function checkRenderFromJson(args, read) {
|
|
67
|
-
const path = args["render-from-json"];
|
|
68
|
-
if (path === undefined)
|
|
69
|
-
return null;
|
|
70
|
-
try {
|
|
71
|
-
JSON.parse(read(path));
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
return APP_MESSAGES[AppMessage.CouldNotBeReadAt](APP_MESSAGES[AppMessage.FlaggedSavedReport]("--render-from-json"), path, reasonOf(err));
|
|
48
|
+
if (reading.kind === "read-fault" || reading.kind === "unparseable")
|
|
49
|
+
return reportRefusal({ ...file, reading });
|
|
75
50
|
}
|
|
76
51
|
return null;
|
|
77
52
|
}
|
|
@@ -107,10 +82,10 @@ function reconcile(argv, ownRunDir) {
|
|
|
107
82
|
refuse(missingValueError);
|
|
108
83
|
if (renderSavedReport(args))
|
|
109
84
|
return true;
|
|
110
|
-
const { corpus, workflows } = refuseUnreadableInputs(args);
|
|
85
|
+
const { corpus, workflows, reports } = refuseUnreadableInputs(args);
|
|
111
86
|
const inputs = inputPathsOf(args);
|
|
112
87
|
const root = resolveTargetRoot({ features: inputs.features });
|
|
113
|
-
const balance = runReconcile(
|
|
88
|
+
const balance = runReconcile(reports, root, corpus, workflows);
|
|
114
89
|
const ctx = runContextOf(args, inputs, runStart, root);
|
|
115
90
|
const planResult = planOutput(collectFormatSpecs(argv), namesStdout);
|
|
116
91
|
if (!planResult.ok)
|
|
@@ -126,17 +101,16 @@ function renderSavedReport(args) {
|
|
|
126
101
|
const ignoredFlagError = checkReRenderFlags(args);
|
|
127
102
|
if (ignoredFlagError)
|
|
128
103
|
refuse(ignoredFlagError);
|
|
129
|
-
const unreadableSavedReportError = checkRenderFromJson(args, readText);
|
|
130
|
-
if (unreadableSavedReportError)
|
|
131
|
-
refuse(unreadableSavedReportError);
|
|
132
104
|
const rehydratePath = args["render-from-json"];
|
|
133
105
|
if (rehydratePath === undefined)
|
|
134
106
|
return false;
|
|
135
|
-
const
|
|
136
|
-
|
|
107
|
+
const savedReading = readDocument(rehydratePath, "json");
|
|
108
|
+
if (savedReading.kind !== "parsed")
|
|
109
|
+
refuse(savedReportRefusal(rehydratePath, savedReading));
|
|
110
|
+
const notSavedError = checkSavedReconciliation(rehydratePath, savedReading.document);
|
|
137
111
|
if (notSavedError)
|
|
138
112
|
refuse(notSavedError);
|
|
139
|
-
const saved = reRenderOrRefusal(rehydratePath,
|
|
113
|
+
const saved = reRenderOrRefusal(rehydratePath, savedReading.document, args["strict"] !== undefined);
|
|
140
114
|
if (typeof saved === "string")
|
|
141
115
|
refuse(saved);
|
|
142
116
|
process.stdout.write(saved.markdown + "\n");
|
|
@@ -148,7 +122,8 @@ function refuseUnreadableInputs(args) {
|
|
|
148
122
|
const missingInputError = checkInputsExist(args, existsSync);
|
|
149
123
|
if (missingInputError)
|
|
150
124
|
refuse(missingInputError);
|
|
151
|
-
const
|
|
125
|
+
const reportsReading = readReports(jsonInputsOf(args, existsSync));
|
|
126
|
+
const unparseableInputError = checkInputsParse(reportsReading);
|
|
152
127
|
if (unparseableInputError)
|
|
153
128
|
refuse(unparseableInputError);
|
|
154
129
|
const corpusDir = corpusDirOf(args);
|
|
@@ -156,25 +131,20 @@ function refuseUnreadableInputs(args) {
|
|
|
156
131
|
refuse(corpusDirRefusal(corpusDir));
|
|
157
132
|
const corpusReading = readCorpus(corpusDir);
|
|
158
133
|
const workflowReading = readWorkflows(args["ci"]);
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (
|
|
164
|
-
refuse(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
refuse(misshapenInputError);
|
|
134
|
+
if (corpusReading.kind === "read-fault")
|
|
135
|
+
refuse(checkInputPaths(args, corpusReading, workflowReading));
|
|
136
|
+
if (workflowReading.kind === "read-fault")
|
|
137
|
+
refuse(checkInputPaths(args, corpusReading, workflowReading));
|
|
138
|
+
if (workflowReading.kind === "unparseable")
|
|
139
|
+
refuse(checkWorkflowsParse(args, workflowReading));
|
|
140
|
+
if (reportsReading.kind === "faulty")
|
|
141
|
+
refuse(checkInputShapes(reportsReading));
|
|
168
142
|
if (corpusReading.kind === "unparseable") {
|
|
169
143
|
refuse(corpusReading.faults
|
|
170
144
|
.map(({ file, message }) => APP_MESSAGES[AppMessage.CorpusFileUnparseable](APP_MESSAGES[AppMessage.FlaggedCorpus]("--features"), file, message))
|
|
171
145
|
.join("\n"));
|
|
172
146
|
}
|
|
173
|
-
|
|
174
|
-
return {
|
|
175
|
-
corpus: corpusReading.kind === "read" ? corpusReading.corpus : [],
|
|
176
|
-
workflows: workflowReading.kind === "read" ? workflowReading.workflows : [],
|
|
177
|
-
};
|
|
147
|
+
return { corpus: corpusReading.corpus, workflows: workflowReading.workflows, reports: reportsReading.reports };
|
|
178
148
|
}
|
|
179
149
|
function runContextOf(args, inputs, runStart, root) {
|
|
180
150
|
const targetDir = args["features"] !== undefined ? dirname(args["features"]) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli-balance/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli-balance/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { InputReadFault } from "../ingest/
|
|
1
|
+
import type { InputReadFault } from "../ingest/inputReading.js";
|
|
2
2
|
export declare function corpusDirOf(args: Record<string, string>): string | InputReadFault;
|
|
3
3
|
//# sourceMappingURL=corpusDir.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corpusDir.d.ts","sourceRoot":"","sources":["../../src/cli-balance/corpusDir.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"corpusDir.d.ts","sourceRoot":"","sources":["../../src/cli-balance/corpusDir.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,cAAc,CAQjF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AppMessage, type PlainAppMessage } from "../messages.js";
|
|
2
2
|
import { type Shape } from "../ingest/inputShapes.js";
|
|
3
|
-
import type { EvidenceReader
|
|
3
|
+
import type { EvidenceReader } from "../ingest/ingestQualityChecks.js";
|
|
4
|
+
import type { ReportFormat } from "../ingest/reportReading.js";
|
|
4
5
|
import type { RunInput, RunInputName } from "@3f-consulting/spec-controller-core";
|
|
5
|
-
export type ReportFormat = "json" | "json-naming-its-shape" | "junit-xml" | "junit-xml-or-one-suite";
|
|
6
6
|
export interface ReportInput {
|
|
7
7
|
readonly reader: EvidenceReader;
|
|
8
8
|
readonly format: ReportFormat;
|
|
@@ -132,6 +132,5 @@ export type InputPaths = Readonly<Partial<Record<InputKey, string>>>;
|
|
|
132
132
|
export declare function inputPathsOf(args: Readonly<Record<string, string>>): InputPaths;
|
|
133
133
|
export declare const INPUT_NAMES: readonly RunInputName[];
|
|
134
134
|
export declare function runInputsOf(paths: InputPaths): RunInput[];
|
|
135
|
-
export declare function reportsOf(paths: InputPaths): EvidenceReport[];
|
|
136
135
|
export {};
|
|
137
136
|
//# sourceMappingURL=evidenceInputs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceInputs.d.ts","sourceRoot":"","sources":["../../src/cli-balance/evidenceInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAOL,KAAK,KAAK,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"evidenceInputs.d.ts","sourceRoot":"","sources":["../../src/cli-balance/evidenceInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAOL,KAAK,KAAK,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC,eAAe,CAAC;IACnG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAID,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4G+B,CAAC;AAE9C,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAAa,CAAC;AAElE,KAAK,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAErE,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,UAAU,CAE/E;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,YAAY,EAA+E,CAAC;AAE/H,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,EAAE,CAKzD"}
|
|
@@ -122,10 +122,4 @@ export function runInputsOf(paths) {
|
|
|
122
122
|
return path === undefined ? input : { ...input, path };
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
|
-
export function reportsOf(paths) {
|
|
126
|
-
return EVIDENCE_INPUTS.flatMap((input) => {
|
|
127
|
-
const path = paths[input.key];
|
|
128
|
-
return input.report === undefined || path === undefined ? [] : [{ reader: input.report.reader, path }];
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
125
|
//# sourceMappingURL=evidenceInputs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceInputs.js","sourceRoot":"","sources":["../../src/cli-balance/evidenceInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,GAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"evidenceInputs.js","sourceRoot":"","sources":["../../src/cli-balance/evidenceInputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ export interface ReRendered {
|
|
|
3
3
|
readonly markdown: string;
|
|
4
4
|
readonly code: VerdictCode;
|
|
5
5
|
}
|
|
6
|
-
export declare function reRender(
|
|
6
|
+
export declare function reRender(document: unknown, strictGiven: boolean): ReRendered;
|
|
7
7
|
export declare function checkReRenderFlags(args: Record<string, string>): string | null;
|
|
8
8
|
//# sourceMappingURL=reRender.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reRender.d.ts","sourceRoot":"","sources":["../../src/cli-balance/reRender.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAIpF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAgB,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"reRender.d.ts","sourceRoot":"","sources":["../../src/cli-balance/reRender.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAIpF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,UAAU,CAQ5E;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAK9E"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { renderReport, verdictCode } from "@3f-consulting/spec-controller-core";
|
|
2
2
|
import { APP_MESSAGES, AppMessage } from "../messages.js";
|
|
3
3
|
import { INPUT_NAMES } from "./evidenceInputs.js";
|
|
4
|
-
export function reRender(
|
|
5
|
-
const saved =
|
|
4
|
+
export function reRender(document, strictGiven) {
|
|
5
|
+
const saved = document;
|
|
6
6
|
const strict = saved.runProvenance.strict === true || strictGiven;
|
|
7
7
|
const report = { ...saved, runProvenance: { ...saved.runProvenance, strict } };
|
|
8
8
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reRender.js","sourceRoot":"","sources":["../../src/cli-balance/reRender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOlD,MAAM,UAAU,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"reRender.js","sourceRoot":"","sources":["../../src/cli-balance/reRender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOlD,MAAM,UAAU,QAAQ,CAAC,QAAiB,EAAE,WAAoB;IAC9D,MAAM,KAAK,GAAG,QAAuB,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,IAAI,WAAW,CAAC;IAClE,MAAM,MAAM,GAAgB,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC5F,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;QAC3C,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;KACpG,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAEtG,MAAM,UAAU,kBAAkB,CAAC,IAA4B;IAC7D,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -1,24 +1,52 @@
|
|
|
1
|
-
import { type CorpusReading, type
|
|
2
|
-
import { type
|
|
1
|
+
import { type CorpusReading, type EvidenceReport, type WorkflowReading } from "../ingest/ingestQualityChecks.js";
|
|
2
|
+
import { type InputReadFault, type ReadFault } from "../ingest/inputReading.js";
|
|
3
|
+
import { type DocumentReading, type ReportReading } from "../ingest/reportReading.js";
|
|
3
4
|
import { type ReRendered } from "./reRender.js";
|
|
4
|
-
|
|
5
|
-
readonly parse: (text: string) => unknown;
|
|
6
|
-
readonly notValid: (subject: string, writer: string, path: string, reason: string) => string;
|
|
7
|
-
}
|
|
5
|
+
import { type ReportInput } from "./evidenceInputs.js";
|
|
8
6
|
export interface JsonInput {
|
|
9
7
|
readonly subject: string;
|
|
10
8
|
readonly path: string;
|
|
11
|
-
readonly
|
|
12
|
-
readonly
|
|
13
|
-
readonly syntax: Syntax;
|
|
9
|
+
readonly report: ReportInput;
|
|
10
|
+
readonly flagged: boolean;
|
|
14
11
|
}
|
|
15
12
|
export declare function jsonInputsOf(args: Record<string, string>, exists: (path: string) => boolean): JsonInput[];
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
interface ReadReport extends JsonInput {
|
|
14
|
+
readonly reading: ReportReading;
|
|
15
|
+
}
|
|
16
|
+
export type FaultyReport = ReadReport & {
|
|
17
|
+
readonly reading: Exclude<ReportReading, {
|
|
18
|
+
kind: "parsed";
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
export type ReportsReading = {
|
|
22
|
+
readonly kind: "read";
|
|
23
|
+
readonly files: readonly ReadReport[];
|
|
24
|
+
readonly reports: readonly EvidenceReport[];
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "faulty";
|
|
27
|
+
readonly files: readonly ReadReport[];
|
|
28
|
+
readonly first: FaultyReport;
|
|
29
|
+
};
|
|
30
|
+
type FaultyReports = Extract<ReportsReading, {
|
|
31
|
+
kind: "faulty";
|
|
32
|
+
}>;
|
|
33
|
+
export declare function readReports(inputs: readonly JsonInput[], read?: (path: string) => string): ReportsReading;
|
|
34
|
+
export declare function reportRefusal({ subject, path, report, reading }: FaultyReport): string;
|
|
35
|
+
export declare function checkInputShapes(reports: FaultyReports): string;
|
|
36
|
+
export declare function checkInputShapes(reports: ReportsReading): string | null;
|
|
18
37
|
export declare function corpusDirRefusal(fault: InputReadFault): string;
|
|
38
|
+
export declare function checkInputPaths(args: Record<string, string>, corpusReading: ReadFault, workflowReading: WorkflowReading): string;
|
|
39
|
+
export declare function checkInputPaths(args: Record<string, string>, corpusReading: CorpusReading, workflowReading: ReadFault): string;
|
|
19
40
|
export declare function checkInputPaths(args: Record<string, string>, corpusReading: CorpusReading, workflowReading: WorkflowReading): string | null;
|
|
20
|
-
export declare function
|
|
21
|
-
|
|
41
|
+
export declare function savedReportRefusal(path: string, reading: Exclude<DocumentReading, {
|
|
42
|
+
kind: "parsed";
|
|
43
|
+
}>): string;
|
|
44
|
+
export declare function checkSavedReconciliation(path: string, saved: unknown): string | null;
|
|
45
|
+
export declare function reRenderOrRefusal(path: string, saved: unknown, strict: boolean): ReRendered | string;
|
|
46
|
+
type UnparseableWorkflows = Extract<WorkflowReading, {
|
|
47
|
+
kind: "unparseable";
|
|
48
|
+
}>;
|
|
49
|
+
export declare function checkWorkflowsParse(args: Record<string, string>, workflowReading: UnparseableWorkflows): string;
|
|
22
50
|
export declare function checkWorkflowsParse(args: Record<string, string>, workflowReading: WorkflowReading): string | null;
|
|
23
51
|
export {};
|
|
24
52
|
//# sourceMappingURL=unreadableInputs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unreadableInputs.d.ts","sourceRoot":"","sources":["../../src/cli-balance/unreadableInputs.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"unreadableInputs.d.ts","sourceRoot":"","sources":["../../src/cli-balance/unreadableInputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +1,18 @@
|
|
|
1
1
|
import { statSync } from "node:fs";
|
|
2
2
|
import { DEFAULT_PACKAGE_JSON, } from "../ingest/ingestQualityChecks.js";
|
|
3
|
+
import { readUtf8, reasonOf } from "../ingest/inputReading.js";
|
|
3
4
|
import { SAVED_RECONCILIATION, shapeFaultIn } from "../ingest/inputShapes.js";
|
|
4
5
|
import { junitReportPathsOf } from "../ingest/junitReportPaths.js";
|
|
5
|
-
import {
|
|
6
|
+
import { readReport } from "../ingest/reportReading.js";
|
|
6
7
|
import { reRender } from "./reRender.js";
|
|
7
8
|
import { APP_MESSAGES, AppMessage } from "../messages.js";
|
|
8
9
|
import { EVIDENCE_INPUTS } from "./evidenceInputs.js";
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const NOT_VALID_IN = {
|
|
11
|
+
json: (subject, _writer, path, reason) => APP_MESSAGES[AppMessage.NotValidJson](subject, path, reason),
|
|
12
|
+
"json-naming-its-shape": APP_MESSAGES[AppMessage.NotValidJsonInShape],
|
|
13
|
+
"junit-xml": APP_MESSAGES[AppMessage.NotValidXml],
|
|
14
|
+
"junit-xml-or-one-suite": APP_MESSAGES[AppMessage.NotValidXml],
|
|
12
15
|
};
|
|
13
|
-
const JSON_SYNTAX_NAMING_SHAPE = {
|
|
14
|
-
parse: (text) => JSON.parse(text),
|
|
15
|
-
notValid: APP_MESSAGES[AppMessage.NotValidJsonInShape],
|
|
16
|
-
};
|
|
17
|
-
const XML_SYNTAX = {
|
|
18
|
-
parse: parseJunitXml,
|
|
19
|
-
notValid: APP_MESSAGES[AppMessage.NotValidXml],
|
|
20
|
-
};
|
|
21
|
-
const XML_SYNTAX_LIFTING_BARE_SUITE = {
|
|
22
|
-
parse: parseJunitXmlLiftingBareSuite,
|
|
23
|
-
notValid: APP_MESSAGES[AppMessage.NotValidXml],
|
|
24
|
-
};
|
|
25
|
-
const SYNTAX_OF = {
|
|
26
|
-
json: JSON_SYNTAX,
|
|
27
|
-
"json-naming-its-shape": JSON_SYNTAX_NAMING_SHAPE,
|
|
28
|
-
"junit-xml": XML_SYNTAX,
|
|
29
|
-
"junit-xml-or-one-suite": XML_SYNTAX_LIFTING_BARE_SUITE,
|
|
30
|
-
};
|
|
31
|
-
function jsonInputOf(report, subject, path) {
|
|
32
|
-
return {
|
|
33
|
-
subject,
|
|
34
|
-
path,
|
|
35
|
-
shape: report.shape,
|
|
36
|
-
writer: APP_MESSAGES[report.writer](),
|
|
37
|
-
syntax: SYNTAX_OF[report.format],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
16
|
export function jsonInputsOf(args, exists) {
|
|
41
17
|
const given = EVIDENCE_INPUTS.flatMap(({ flag, report }) => {
|
|
42
18
|
const path = args[flag];
|
|
@@ -44,13 +20,13 @@ export function jsonInputsOf(args, exists) {
|
|
|
44
20
|
return [];
|
|
45
21
|
const paths = report.takesADirectory === true && isDirectory(path) ? reportFilesIn(path) : [path];
|
|
46
22
|
const subject = APP_MESSAGES[report.subject](`--${flag}`);
|
|
47
|
-
return paths.map((file) =>
|
|
23
|
+
return paths.map((file) => ({ subject, path: file, report, flagged: true }));
|
|
48
24
|
});
|
|
49
25
|
return [...given, ...manifestReadByDefault(args, exists)];
|
|
50
26
|
}
|
|
51
27
|
function manifestReadByDefault(args, exists) {
|
|
52
28
|
return EVIDENCE_INPUTS.flatMap(({ flag, report }) => report?.reader === "package-manifest" && args[flag] === undefined && exists(DEFAULT_PACKAGE_JSON)
|
|
53
|
-
? [
|
|
29
|
+
? [{ subject: APP_MESSAGES[AppMessage.DefaultPackageJson](), path: DEFAULT_PACKAGE_JSON, report, flagged: false }]
|
|
54
30
|
: []);
|
|
55
31
|
}
|
|
56
32
|
function isDirectory(path) {
|
|
@@ -71,36 +47,30 @@ function reportFilesIn(directory) {
|
|
|
71
47
|
return [directory];
|
|
72
48
|
}
|
|
73
49
|
}
|
|
74
|
-
export function
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
catch (err) {
|
|
83
|
-
return APP_MESSAGES[AppMessage.CouldNotBeReadAt](input.subject, input.path, reasonOf(err));
|
|
50
|
+
export function readReports(inputs, read = readUtf8) {
|
|
51
|
+
const files = inputs.map((input) => ({ ...input, reading: readReport(input.path, input.report.format, input.report.shape, read) }));
|
|
52
|
+
const reports = [];
|
|
53
|
+
for (const file of files) {
|
|
54
|
+
const { reading } = file;
|
|
55
|
+
if (reading.kind !== "parsed")
|
|
56
|
+
return { kind: "faulty", files, first: { ...file, reading } };
|
|
57
|
+
reports.push({ reader: file.report.reader, document: reading.document });
|
|
84
58
|
}
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
document = input.syntax.parse(text);
|
|
88
|
-
}
|
|
89
|
-
catch (err) {
|
|
90
|
-
return input.syntax.notValid(input.subject, input.writer, input.path, reasonOf(err));
|
|
91
|
-
}
|
|
92
|
-
const fault = shapeFaultIn(document, input.shape);
|
|
93
|
-
if (fault === null)
|
|
94
|
-
return null;
|
|
95
|
-
return APP_MESSAGES[AppMessage.NotInShape](input.subject, input.writer, input.path, fault);
|
|
59
|
+
return { kind: "read", files, reports };
|
|
96
60
|
}
|
|
97
|
-
export function
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return fault;
|
|
61
|
+
export function reportRefusal({ subject, path, report, reading }) {
|
|
62
|
+
const writer = APP_MESSAGES[report.writer]();
|
|
63
|
+
switch (reading.kind) {
|
|
64
|
+
case "read-fault":
|
|
65
|
+
return APP_MESSAGES[AppMessage.CouldNotBeReadAt](subject, path, reading.fault.reason);
|
|
66
|
+
case "unparseable":
|
|
67
|
+
return NOT_VALID_IN[report.format](subject, writer, path, reading.reason);
|
|
68
|
+
case "misshapen":
|
|
69
|
+
return APP_MESSAGES[AppMessage.NotInShape](subject, writer, path, reading.fault);
|
|
102
70
|
}
|
|
103
|
-
|
|
71
|
+
}
|
|
72
|
+
export function checkInputShapes(reports) {
|
|
73
|
+
return reports.kind === "faulty" ? reportRefusal(reports.first) : null;
|
|
104
74
|
}
|
|
105
75
|
function pathRefusal(subject, fault) {
|
|
106
76
|
return APP_MESSAGES[AppMessage.CouldNotBeReadAt](subject, fault.path, fault.reason);
|
|
@@ -119,15 +89,18 @@ export function checkInputPaths(args, corpusReading, workflowReading) {
|
|
|
119
89
|
}
|
|
120
90
|
return null;
|
|
121
91
|
}
|
|
122
|
-
export function
|
|
123
|
-
|
|
92
|
+
export function savedReportRefusal(path, reading) {
|
|
93
|
+
return APP_MESSAGES[AppMessage.CouldNotBeReadAt](APP_MESSAGES[AppMessage.FlaggedSavedReport]("--render-from-json"), path, reading.kind === "read-fault" ? reading.fault.reason : reading.reason);
|
|
94
|
+
}
|
|
95
|
+
export function checkSavedReconciliation(path, saved) {
|
|
96
|
+
const fault = shapeFaultIn(saved, SAVED_RECONCILIATION);
|
|
124
97
|
if (fault === null)
|
|
125
98
|
return null;
|
|
126
99
|
return APP_MESSAGES[AppMessage.NotASavedReconciliation](APP_MESSAGES[AppMessage.FlaggedFile]("--render-from-json"), path, fault);
|
|
127
100
|
}
|
|
128
|
-
export function reRenderOrRefusal(path,
|
|
101
|
+
export function reRenderOrRefusal(path, saved, strict) {
|
|
129
102
|
try {
|
|
130
|
-
return reRender(
|
|
103
|
+
return reRender(saved, strict);
|
|
131
104
|
}
|
|
132
105
|
catch (err) {
|
|
133
106
|
return APP_MESSAGES[AppMessage.NotRenderableAsSaved](APP_MESSAGES[AppMessage.FlaggedFile]("--render-from-json"), path, reasonOf(err));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unreadableInputs.js","sourceRoot":"","sources":["../../src/cli-balance/unreadableInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,oBAAoB,GAIrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"unreadableInputs.js","sourceRoot":"","sources":["../../src/cli-balance/unreadableInputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ReadFault } from "./inputReading.js";
|
|
1
2
|
import { type ParsedFeatureFile, type ParsedWorkflow, type SourceFault } from "@3f-consulting/spec-controller-core";
|
|
2
3
|
import { type EvidenceObligations } from "@3f-consulting/spec-controller-core";
|
|
3
4
|
import type { EvidenceObservation, EvidenceReconciliation } from "@3f-consulting/spec-controller-core";
|
|
@@ -10,41 +11,32 @@ type ParsedCorpus = {
|
|
|
10
11
|
readonly kind: "read";
|
|
11
12
|
readonly corpus: readonly ParsedFeatureFile[];
|
|
12
13
|
};
|
|
13
|
-
export type CorpusReading = ParsedCorpus |
|
|
14
|
-
readonly kind: "read-fault";
|
|
15
|
-
readonly fault: InputReadFault;
|
|
16
|
-
};
|
|
14
|
+
export type CorpusReading = ParsedCorpus | ReadFault;
|
|
17
15
|
export declare function readCorpus(featuresDir: string): CorpusReading;
|
|
18
|
-
|
|
19
|
-
readonly path: string;
|
|
20
|
-
readonly reason: string;
|
|
21
|
-
}
|
|
22
|
-
export type WorkflowReading = {
|
|
23
|
-
readonly kind: "read-fault";
|
|
24
|
-
readonly fault: InputReadFault;
|
|
25
|
-
} | {
|
|
16
|
+
type ParsedWorkflows = {
|
|
26
17
|
readonly kind: "unparseable";
|
|
27
18
|
readonly faults: readonly SourceFault[];
|
|
28
19
|
} | {
|
|
29
20
|
readonly kind: "read";
|
|
30
21
|
readonly workflows: readonly ParsedWorkflow[];
|
|
31
22
|
};
|
|
23
|
+
export type WorkflowReading = ParsedWorkflows | ReadFault;
|
|
32
24
|
export declare function readWorkflows(ciPath: string | undefined, read?: (path: string) => string): WorkflowReading;
|
|
33
25
|
export declare function featureNamesOf(corpus: readonly ParsedFeatureFile[]): Map<string, string>;
|
|
34
26
|
export declare function evidenceObligationsOf(corpus: readonly ParsedFeatureFile[]): EvidenceObligations;
|
|
35
27
|
declare const OBSERVATION_READERS: {
|
|
36
|
-
vitest: (
|
|
37
|
-
pytest: (
|
|
38
|
-
jest: (
|
|
39
|
-
junit: (
|
|
40
|
-
rspec: (
|
|
41
|
-
cucumber: (
|
|
28
|
+
vitest: (report: unknown, root: string) => EvidenceObservation[];
|
|
29
|
+
pytest: (report: unknown) => EvidenceObservation[];
|
|
30
|
+
jest: (report: unknown, root: string) => EvidenceObservation[];
|
|
31
|
+
junit: (report: unknown) => EvidenceObservation[];
|
|
32
|
+
rspec: (report: unknown, root: string) => EvidenceObservation[];
|
|
33
|
+
cucumber: (report: unknown, root: string) => EvidenceObservation[];
|
|
42
34
|
};
|
|
43
35
|
type ObservationReader = keyof typeof OBSERVATION_READERS;
|
|
44
36
|
export type EvidenceReader = ObservationReader | "package-manifest" | "ci-step-record";
|
|
45
37
|
export interface EvidenceReport {
|
|
46
38
|
readonly reader: EvidenceReader;
|
|
47
|
-
readonly
|
|
39
|
+
readonly document: unknown;
|
|
48
40
|
}
|
|
49
41
|
export declare function runReconcile(reports: readonly EvidenceReport[], root: string, corpus: readonly ParsedFeatureFile[], workflows: readonly ParsedWorkflow[]): EvidenceReconciliation;
|
|
50
42
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestQualityChecks.d.ts","sourceRoot":"","sources":["../../src/ingest/ingestQualityChecks.ts"],"names":[],"mappings":"
|
|
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,EAML,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEnB,KAAK,WAAW,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,qCAAqC,CAAC;AAoB7C,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,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,GAAG,mBAAmB,CAE/F;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,CAexB"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from "node:fs";
|
|
2
1
|
import { basename } from "node:path";
|
|
3
2
|
import { ciSourcePathsOf } from "./ciSourcePaths.js";
|
|
4
|
-
import {
|
|
5
|
-
import { parseJunitXml, parseJunitXmlLiftingBareSuite } from "./junitXml.js";
|
|
3
|
+
import { readingOf, readUtf8 } from "./inputReading.js";
|
|
6
4
|
import { corpusPathOf, MissingFeatureCorpusError, readFeatureSources, slugOf } from "./ingestScenarios.js";
|
|
7
5
|
import { featureCountsOf, parseFeatureCorpus, untaggedScenariosOf, parseWorkflows, untaggedScenarioId, } from "@3f-consulting/spec-controller-core";
|
|
8
6
|
import { BUILT_IN_DEFERRAL_TAGS, corpusCountsOf, } from "@3f-consulting/spec-controller-core";
|
|
@@ -20,22 +18,6 @@ const CUCUMBER_QUALITY_CHECK = "integration";
|
|
|
20
18
|
const RECONCILER_INVOCATION = "spec-controller balance";
|
|
21
19
|
export const DEFAULT_CI_PATH = ".github/workflows";
|
|
22
20
|
export const DEFAULT_PACKAGE_JSON = "package.json";
|
|
23
|
-
function readJsonIfPresent(path) {
|
|
24
|
-
if (!path || !existsSync(path))
|
|
25
|
-
return undefined;
|
|
26
|
-
return JSON.parse(readFileSync(path, "utf8"));
|
|
27
|
-
}
|
|
28
|
-
function readJunitXmlIfPresent(path, parse) {
|
|
29
|
-
if (!path || !existsSync(path))
|
|
30
|
-
return undefined;
|
|
31
|
-
return parse(readFileSync(path, "utf8"));
|
|
32
|
-
}
|
|
33
|
-
function readJunitReportsIfPresent(path) {
|
|
34
|
-
if (!path)
|
|
35
|
-
return undefined;
|
|
36
|
-
const reports = junitReportPathsOf(path).map((report) => parseJunitXmlLiftingBareSuite(readFileSync(report, "utf8")));
|
|
37
|
-
return { testsuites: { testsuite: reports.flatMap((report) => report.testsuites?.testsuite ?? []) } };
|
|
38
|
-
}
|
|
39
21
|
function sourcesOf(featuresDir) {
|
|
40
22
|
try {
|
|
41
23
|
return readFeatureSources(featuresDir);
|
|
@@ -56,26 +38,7 @@ function parsedCorpusOf(featuresDir, files) {
|
|
|
56
38
|
};
|
|
57
39
|
}
|
|
58
40
|
export function readCorpus(featuresDir) {
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
files = sourcesOf(featuresDir);
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
const fault = readFaultOf(err, featuresDir);
|
|
65
|
-
if (fault === null)
|
|
66
|
-
throw err;
|
|
67
|
-
return { kind: "read-fault", fault };
|
|
68
|
-
}
|
|
69
|
-
return parsedCorpusOf(featuresDir, files);
|
|
70
|
-
}
|
|
71
|
-
function readFaultOf(err, path) {
|
|
72
|
-
const errno = err;
|
|
73
|
-
if (!(err instanceof Error) || typeof errno.code !== "string")
|
|
74
|
-
return null;
|
|
75
|
-
return { path: errno.path ?? path, reason: err.message };
|
|
76
|
-
}
|
|
77
|
-
function readUtf8(path) {
|
|
78
|
-
return readFileSync(path, "utf8");
|
|
41
|
+
return readingOf(featuresDir, () => sourcesOf(featuresDir), (files) => parsedCorpusOf(featuresDir, files));
|
|
79
42
|
}
|
|
80
43
|
function readWorkflowSource(path, read) {
|
|
81
44
|
try {
|
|
@@ -87,26 +50,21 @@ function readWorkflowSource(path, read) {
|
|
|
87
50
|
throw err;
|
|
88
51
|
}
|
|
89
52
|
}
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
paths = ciSourcePathsOf(path);
|
|
96
|
-
sources = paths.map((source) => readWorkflowSource(source, read));
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
const fault = readFaultOf(err, path);
|
|
100
|
-
if (fault === null)
|
|
101
|
-
throw err;
|
|
102
|
-
return { kind: "read-fault", fault };
|
|
103
|
-
}
|
|
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 }) {
|
|
104
58
|
const parse = parseWorkflows(sources);
|
|
105
59
|
if (parse.kind === "parsed")
|
|
106
60
|
return { kind: "read", workflows: parse.parsed };
|
|
107
61
|
const pathOf = new Map(paths.map((read) => [basename(read), read]));
|
|
108
62
|
return { kind: "unparseable", faults: parse.faults.map(({ file, message }) => ({ file: pathOf.get(file) ?? file, message })) };
|
|
109
63
|
}
|
|
64
|
+
export function readWorkflows(ciPath, read = readUtf8) {
|
|
65
|
+
const path = ciPath ?? DEFAULT_CI_PATH;
|
|
66
|
+
return readingOf(path, () => workflowSourcesOf(path, read), parsedWorkflowsOf);
|
|
67
|
+
}
|
|
110
68
|
export function featureNamesOf(corpus) {
|
|
111
69
|
const map = new Map();
|
|
112
70
|
for (const { featureCode, file } of corpus) {
|
|
@@ -118,34 +76,31 @@ export function featureNamesOf(corpus) {
|
|
|
118
76
|
export function evidenceObligationsOf(corpus) {
|
|
119
77
|
return corpusCountsOf(corpus.map((parsed) => ({ feature: parsed.file, ...featureCountsOf(parsed) })));
|
|
120
78
|
}
|
|
121
|
-
function observedIn(report, parse) {
|
|
122
|
-
return report === undefined ? [] : parse(report);
|
|
123
|
-
}
|
|
124
79
|
const OBSERVATION_READERS = {
|
|
125
|
-
vitest: (
|
|
126
|
-
pytest: (
|
|
127
|
-
jest: (
|
|
128
|
-
junit: (
|
|
129
|
-
rspec: (
|
|
130
|
-
cucumber: (
|
|
80
|
+
vitest: (report, root) => parseVitestEvidenceObservations(report, VITEST_QUALITY_CHECK, root),
|
|
81
|
+
pytest: (report) => parsePytestEvidenceObservations(report, PYTEST_QUALITY_CHECK),
|
|
82
|
+
jest: (report, root) => parseVitestEvidenceObservations(report, JEST_QUALITY_CHECK, root),
|
|
83
|
+
junit: (report) => parseJunitEvidenceObservations(report, JUNIT_QUALITY_CHECK),
|
|
84
|
+
rspec: (report, root) => parseRspecEvidenceObservations(report, RSPEC_QUALITY_CHECK, root),
|
|
85
|
+
cucumber: (report, root) => parseCucumberEvidenceObservations(report, CUCUMBER_QUALITY_CHECK, root),
|
|
131
86
|
};
|
|
132
87
|
function isObservationReader(reader) {
|
|
133
88
|
return Object.hasOwn(OBSERVATION_READERS, reader);
|
|
134
89
|
}
|
|
135
90
|
function observationsOf(reports, root) {
|
|
136
|
-
return reports.flatMap(({ reader,
|
|
91
|
+
return reports.flatMap(({ reader, document }) => (isObservationReader(reader) ? OBSERVATION_READERS[reader](document, root) : []));
|
|
137
92
|
}
|
|
138
|
-
function
|
|
139
|
-
return reports.find((report) => report.reader === reader)?.
|
|
93
|
+
function documentReadBy(reports, reader) {
|
|
94
|
+
return reports.find((report) => report.reader === reader)?.document;
|
|
140
95
|
}
|
|
141
96
|
export function runReconcile(reports, root, corpus, workflows) {
|
|
142
|
-
const packageJson =
|
|
97
|
+
const packageJson = documentReadBy(reports, "package-manifest") ?? {};
|
|
143
98
|
return evidenceReconciliationFromSources({
|
|
144
99
|
features: corpus,
|
|
145
100
|
untaggedScenarios: corpus.flatMap((parsed) => untaggedScenariosOf(parsed).map((scenario) => untaggedScenarioId({ feature: parsed.file, scenario }))),
|
|
146
101
|
packageJson,
|
|
147
102
|
ciWorkflows: workflows,
|
|
148
|
-
ciStepRecord:
|
|
103
|
+
ciStepRecord: documentReadBy(reports, "ci-step-record"),
|
|
149
104
|
behaviouralObservations: observationsOf(reports, root),
|
|
150
105
|
deferralTags: BUILT_IN_DEFERRAL_TAGS,
|
|
151
106
|
reconcilerInvocation: RECONCILER_INVOCATION,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestQualityChecks.js","sourceRoot":"","sources":["../../src/ingest/ingestQualityChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ingestQualityChecks.js","sourceRoot":"","sources":["../../src/ingest/ingestQualityChecks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Shape } from "./inputShapes.js";
|
|
2
|
+
import { type ReadFault } from "./inputReading.js";
|
|
3
|
+
export type ReportFormat = "json" | "json-naming-its-shape" | "junit-xml" | "junit-xml-or-one-suite";
|
|
4
|
+
interface Unparseable {
|
|
5
|
+
readonly kind: "unparseable";
|
|
6
|
+
readonly reason: string;
|
|
7
|
+
}
|
|
8
|
+
interface ParsedDocument {
|
|
9
|
+
readonly kind: "parsed";
|
|
10
|
+
readonly document: unknown;
|
|
11
|
+
}
|
|
12
|
+
export type DocumentReading = ReadFault | Unparseable | ParsedDocument;
|
|
13
|
+
export type ReportReading = DocumentReading | {
|
|
14
|
+
readonly kind: "misshapen";
|
|
15
|
+
readonly fault: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function readDocument(path: string, format: ReportFormat, read?: (path: string) => string): DocumentReading;
|
|
18
|
+
export declare function readReport(path: string, format: ReportFormat, shape: Shape, read?: (path: string) => string): ReportReading;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=reportReading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportReading.d.ts","sourceRoot":"","sources":["../../src/ingest/reportReading.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,uBAAuB,GAAG,WAAW,GAAG,wBAAwB,CAAC;AASrG,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAUrG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAiB,GAAG,eAAe,CAE3H;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAiB,GACxC,aAAa,CAKf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { parseJunitXml, parseJunitXmlLiftingBareSuite } from "./junitXml.js";
|
|
2
|
+
import { shapeFaultIn } from "./inputShapes.js";
|
|
3
|
+
import { readingOf, readUtf8, reasonOf } from "./inputReading.js";
|
|
4
|
+
const PARSER_OF = {
|
|
5
|
+
json: (text) => JSON.parse(text),
|
|
6
|
+
"json-naming-its-shape": (text) => JSON.parse(text),
|
|
7
|
+
"junit-xml": parseJunitXml,
|
|
8
|
+
"junit-xml-or-one-suite": parseJunitXmlLiftingBareSuite,
|
|
9
|
+
};
|
|
10
|
+
function documentOf(text, parse) {
|
|
11
|
+
try {
|
|
12
|
+
return { kind: "parsed", document: parse(text) };
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
return { kind: "unparseable", reason: reasonOf(err) };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function readDocument(path, format, read = readUtf8) {
|
|
19
|
+
return readingOf(path, () => read(path), (text) => documentOf(text, PARSER_OF[format]));
|
|
20
|
+
}
|
|
21
|
+
export function readReport(path, format, shape, read = readUtf8) {
|
|
22
|
+
const reading = readDocument(path, format, read);
|
|
23
|
+
if (reading.kind !== "parsed")
|
|
24
|
+
return reading;
|
|
25
|
+
const fault = shapeFaultIn(reading.document, shape);
|
|
26
|
+
return fault === null ? reading : { kind: "misshapen", fault };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=reportReading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportReading.js","sourceRoot":"","sources":["../../src/ingest/reportReading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAkB,MAAM,mBAAmB,CAAC;AAIlF,MAAM,SAAS,GAA8D;IAC3E,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAChC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACnD,WAAW,EAAE,aAAa;IAC1B,wBAAwB,EAAE,6BAA6B;CACxD,CAAC;AAgBF,SAAS,UAAU,CAAC,IAAY,EAAE,KAAgC;IAChE,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAoB,EAAE,OAAiC,QAAQ;IACxG,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,MAAoB,EACpB,KAAY,EACZ,OAAiC,QAAQ;IAEzC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spec-controller",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.67",
|
|
4
4
|
"description": "Reconcile the behaviour your scenarios name against the evidence that actually ran — the deterministic `balance` CLI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"reconciliation",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"fast-xml-parser": "^5.11.2",
|
|
26
26
|
"yaml": "^2.9.0",
|
|
27
|
-
"@3f-consulting/spec-controller-core": "0.1.
|
|
27
|
+
"@3f-consulting/spec-controller-core": "0.1.67"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public"
|