@thymian/plugin-http-tester 0.1.11 → 0.1.12-canary.20260709-74e687c
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/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -66
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type Rule, type RunRulesResult, ThymianFormat, type ThymianPlugin, type ToolRun } from '@thymian/core';
|
|
1
|
+
import { type Logger, type Rule, type RunRulesResult, ThymianFormat, type ThymianPlugin, type ToolRun } from '@thymian/core';
|
|
2
2
|
import { type HttpTesterRuleDiagnostics } from './http-test-api-context.js';
|
|
3
3
|
export { HttpTestApiContext, type HttpTesterRuleDiagnostics, type RuleFnResultPlacement, } from './http-test-api-context.js';
|
|
4
|
-
export declare function createRuns(pluginName: string, ruleResults: RunRulesResult<HttpTesterRuleDiagnostics>, rules: Rule[] | undefined, thymianFormat: ThymianFormat): ToolRun[];
|
|
4
|
+
export declare function createRuns(pluginName: string, ruleResults: RunRulesResult<HttpTesterRuleDiagnostics>, rules: Rule[] | undefined, thymianFormat: ThymianFormat, logger: Logger): ToolRun[];
|
|
5
5
|
export declare function createHttpTesterPlugin(pluginName?: string): ThymianPlugin;
|
|
6
6
|
export declare const httpTesterPlugin: ThymianPlugin;
|
|
7
7
|
export default httpTesterPlugin;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAaL,KAAK,IAAI,EAMT,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAaL,KAAK,MAAM,EAEX,KAAK,IAAI,EAMT,KAAK,cAAc,EAKnB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,OAAO,EACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC;AAgJpC,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,cAAc,CAAC,yBAAyB,CAAC,EACtD,KAAK,EAAE,IAAI,EAAE,YAAK,EAClB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,EAAE,CAwIX;AAED,wBAAgB,sBAAsB,CACpC,UAAU,SAAgC,GACzC,aAAa,CAsEf;AAED,eAAO,MAAM,gBAAgB,eAA2B,CAAC;AAEzD,eAAe,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { createContextFromEmitter,
|
|
2
|
+
import { createContextFromEmitter, createTestCaseExecution, createTestStep, createToolRun, isCustomHttpTestCaseStep, isGroupedHttpTestCaseStep, isSingleHttpTestCaseStep, resolveViolationLocation, ruleFindingToFindingRecord, rulesToRuleDescriptors, runRules, ThymianBaseError, ThymianFormat, } from '@thymian/core';
|
|
3
3
|
import { HttpTestApiContext, } from './http-test-api-context.js';
|
|
4
4
|
export { HttpTestApiContext, } from './http-test-api-context.js';
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* A step-level rule violation is kept so a failed step stays visible, but
|
|
7
|
+
* WITHOUT a `ruleId` — rule attribution at step granularity is intentionally not
|
|
8
|
+
* represented; the owning {@link TestCaseExecution}'s `ruleId` identifies the rule.
|
|
9
|
+
*/
|
|
10
|
+
function ruleViolationToStepFinding(violation, rule) {
|
|
6
11
|
const message = violation.message;
|
|
7
12
|
return {
|
|
8
13
|
id: randomUUID(),
|
|
9
14
|
kind: 'rule-violation',
|
|
10
|
-
ruleId: rule.meta.name,
|
|
11
15
|
title: message || (rule.meta.summary ?? rule.meta.description ?? rule.meta.name),
|
|
12
|
-
severity: rule.meta.severity,
|
|
13
16
|
...(message
|
|
14
17
|
? { message: { text: message } }
|
|
15
18
|
: rule.meta.explanation
|
|
@@ -18,14 +21,17 @@ function ruleViolationToFindingRecord(violation, rule) {
|
|
|
18
21
|
};
|
|
19
22
|
}
|
|
20
23
|
// stepPlacements must be pre-filtered to this step (testCaseIndex + stepIndex match).
|
|
21
|
-
function
|
|
24
|
+
function buildTestStep(step, stepIndex, stepPlacements, rule, location) {
|
|
22
25
|
const findings = [];
|
|
23
26
|
for (const { result } of stepPlacements) {
|
|
24
27
|
if (result.violation !== undefined) {
|
|
25
|
-
findings.push(
|
|
28
|
+
findings.push(ruleViolationToStepFinding(result.violation, rule));
|
|
26
29
|
}
|
|
27
30
|
for (const finding of result.findings) {
|
|
28
|
-
|
|
31
|
+
const record = ruleFindingToFindingRecord(finding);
|
|
32
|
+
if (record) {
|
|
33
|
+
findings.push(record);
|
|
34
|
+
}
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
37
|
const httpTransactions = step.transactions
|
|
@@ -36,7 +42,7 @@ function buildStepExecution(step, stepIndex, stepPlacements, rule, location) {
|
|
|
36
42
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
37
43
|
response: t.response,
|
|
38
44
|
}));
|
|
39
|
-
return
|
|
45
|
+
return createTestStep({
|
|
40
46
|
name: `Step ${stepIndex + 1}`,
|
|
41
47
|
location,
|
|
42
48
|
findings,
|
|
@@ -64,113 +70,135 @@ function stepToLocation(step) {
|
|
|
64
70
|
}
|
|
65
71
|
return { type: 'custom', value: 'unknown' };
|
|
66
72
|
}
|
|
67
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Map a test case to an {@link ExecutionStatus}. The execution status reflects
|
|
75
|
+
* whether the *rule* found something, NOT the raw HTTP test-case outcome:
|
|
76
|
+
* - a rule violation ⇒ `failed` (the only path to `failed`);
|
|
77
|
+
* - otherwise a `rule-skip` signal, a skipped case, or a case that could not be
|
|
78
|
+
* executed (HTTP-level failure without a violation) ⇒ `skipped`;
|
|
79
|
+
* - otherwise ⇒ `passed`.
|
|
80
|
+
*/
|
|
81
|
+
function computeTestCaseStatus(testCase, signals) {
|
|
68
82
|
const durationMilliseconds = testCase.end !== undefined ? testCase.end - testCase.start : undefined;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
title: testCase.name,
|
|
75
|
-
severity: 'info',
|
|
76
|
-
reason: testCase.reason ?? '',
|
|
77
|
-
...(testCase.reason ? { message: { text: testCase.reason } } : {}),
|
|
83
|
+
if (signals.hasViolation) {
|
|
84
|
+
return {
|
|
85
|
+
kind: 'failed',
|
|
86
|
+
...(signals.violationReason ? { reason: signals.violationReason } : {}),
|
|
87
|
+
...(durationMilliseconds !== undefined ? { durationMilliseconds } : {}),
|
|
78
88
|
};
|
|
79
89
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
title: testCase.name,
|
|
85
|
-
severity: 'error',
|
|
86
|
-
...(testCase.reason ? { message: { text: testCase.reason } } : {}),
|
|
87
|
-
...(durationMilliseconds !== undefined ? { durationMilliseconds } : {}),
|
|
90
|
+
if (signals.hasRuleSkip) {
|
|
91
|
+
return {
|
|
92
|
+
kind: 'skipped',
|
|
93
|
+
...(signals.ruleSkipReason ? { reason: signals.ruleSkipReason } : {}),
|
|
88
94
|
};
|
|
89
95
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
title: testCase.name,
|
|
95
|
-
severity: 'info',
|
|
96
|
-
...(durationMilliseconds !== undefined ? { durationMilliseconds } : {}),
|
|
96
|
+
if (testCase.status === 'skipped' || testCase.status === 'failed') {
|
|
97
|
+
return {
|
|
98
|
+
kind: 'skipped',
|
|
99
|
+
...(testCase.reason ? { reason: testCase.reason } : {}),
|
|
97
100
|
};
|
|
98
101
|
}
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
children,
|
|
104
|
-
});
|
|
102
|
+
return {
|
|
103
|
+
kind: 'passed',
|
|
104
|
+
...(durationMilliseconds !== undefined ? { durationMilliseconds } : {}),
|
|
105
|
+
};
|
|
105
106
|
}
|
|
106
107
|
// exported for testing
|
|
107
|
-
export function createRuns(pluginName, ruleResults, rules = [], thymianFormat) {
|
|
108
|
+
export function createRuns(pluginName, ruleResults, rules = [], thymianFormat, logger) {
|
|
108
109
|
const ruleMap = new Map(rules.map((r) => [r.meta.name, r]));
|
|
109
|
-
const
|
|
110
|
+
const executions = [];
|
|
110
111
|
for (const [ruleName, { ruleFnResult, diagnostics }] of Object.entries(ruleResults)) {
|
|
111
112
|
const rule = ruleMap.get(ruleName);
|
|
112
113
|
if (!rule) {
|
|
113
114
|
continue;
|
|
114
115
|
}
|
|
115
116
|
const consumedResults = new Set();
|
|
116
|
-
const ruleChildren = [];
|
|
117
117
|
if (diagnostics) {
|
|
118
118
|
for (const { testResult, placements } of diagnostics) {
|
|
119
119
|
testResult.cases.forEach((testCase, testCaseIndex) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
// Case-level placements (no step index) no longer become findings —
|
|
121
|
+
// the case outcome lives on `status`. Accumulate violation/rule-skip
|
|
122
|
+
// signals across every placement (case- and step-level) to derive it.
|
|
123
|
+
const signals = {
|
|
124
|
+
hasViolation: false,
|
|
125
|
+
hasRuleSkip: false,
|
|
126
|
+
};
|
|
127
|
+
const noteResult = (result) => {
|
|
123
128
|
consumedResults.add(result);
|
|
124
129
|
if (result.violation !== undefined) {
|
|
125
|
-
|
|
130
|
+
signals.hasViolation = true;
|
|
131
|
+
if (signals.violationReason === undefined) {
|
|
132
|
+
signals.violationReason = result.violation.message;
|
|
133
|
+
}
|
|
126
134
|
}
|
|
127
135
|
for (const finding of result.findings) {
|
|
128
|
-
|
|
136
|
+
if (finding.kind === 'rule-skip') {
|
|
137
|
+
signals.hasRuleSkip = true;
|
|
138
|
+
if (signals.ruleSkipReason === undefined) {
|
|
139
|
+
signals.ruleSkipReason = finding.reason ?? finding.message;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
129
142
|
}
|
|
143
|
+
};
|
|
144
|
+
for (const { result } of placements.filter((p) => p.testCaseIndex === testCaseIndex && p.stepIndex === undefined)) {
|
|
145
|
+
noteResult(result);
|
|
130
146
|
}
|
|
131
|
-
const
|
|
147
|
+
const steps = testCase.steps.map((step, stepIndex) => {
|
|
132
148
|
const stepPlacements = placements.filter((p) => p.testCaseIndex === testCaseIndex && p.stepIndex === stepIndex);
|
|
133
149
|
for (const { result } of stepPlacements) {
|
|
134
|
-
|
|
150
|
+
noteResult(result);
|
|
135
151
|
}
|
|
136
|
-
return
|
|
152
|
+
return buildTestStep(step, stepIndex, stepPlacements, rule, stepToLocation(step));
|
|
137
153
|
});
|
|
138
|
-
|
|
154
|
+
executions.push(createTestCaseExecution({
|
|
155
|
+
name: testCase.name,
|
|
156
|
+
ruleId: ruleName,
|
|
157
|
+
status: computeTestCaseStatus(testCase, signals),
|
|
158
|
+
steps,
|
|
159
|
+
}));
|
|
139
160
|
});
|
|
140
161
|
}
|
|
141
162
|
}
|
|
142
|
-
// Fallback:
|
|
163
|
+
// Fallback: results not placed by diagnostics have no test-case/step slot in
|
|
164
|
+
// the strict model. This path is verified unreachable in production; emit a
|
|
165
|
+
// failed test case (folding any diagnostic text into the reason) and warn.
|
|
143
166
|
for (const result of ruleFnResult) {
|
|
144
167
|
if (consumedResults.has(result)) {
|
|
145
168
|
continue;
|
|
146
169
|
}
|
|
147
170
|
const resolvedLocation = resolveViolationLocation(result.location, thymianFormat, ruleName);
|
|
148
|
-
const
|
|
149
|
-
if (result.violation) {
|
|
150
|
-
|
|
171
|
+
const reasonParts = [];
|
|
172
|
+
if (result.violation?.message) {
|
|
173
|
+
reasonParts.push(result.violation.message);
|
|
151
174
|
}
|
|
152
175
|
for (const finding of result.findings) {
|
|
153
|
-
|
|
176
|
+
if (finding.title) {
|
|
177
|
+
reasonParts.push(finding.title);
|
|
178
|
+
}
|
|
154
179
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
180
|
+
const reason = reasonParts.join('; ') || undefined;
|
|
181
|
+
// A violation ⇒ failed; anything else couldn't be placed/executed ⇒ skipped.
|
|
182
|
+
const status = result.violation !== undefined
|
|
183
|
+
? { kind: 'failed', ...(reason ? { reason } : {}) }
|
|
184
|
+
: { kind: 'skipped', ...(reason ? { reason } : {}) };
|
|
185
|
+
logger.warn(`${pluginName}: rule "${ruleName}" produced an unplaced result at ${resolvedLocation.heading}; emitting a ${status.kind} test case.`);
|
|
186
|
+
executions.push(createTestCaseExecution({
|
|
158
187
|
name: resolvedLocation.heading,
|
|
188
|
+
ruleId: ruleName,
|
|
189
|
+
status,
|
|
190
|
+
steps: [],
|
|
159
191
|
}));
|
|
160
192
|
}
|
|
161
|
-
ruleExecutions.push(createExecution({
|
|
162
|
-
location: { type: 'custom', value: ruleName },
|
|
163
|
-
findings: [],
|
|
164
|
-
children: ruleChildren,
|
|
165
|
-
}));
|
|
166
193
|
}
|
|
167
194
|
const ruleDescriptors = rulesToRuleDescriptors(rules, (r) => r.testRule);
|
|
168
195
|
return [
|
|
169
196
|
createToolRun({
|
|
170
197
|
tool: { name: pluginName },
|
|
171
198
|
runType: 'test',
|
|
172
|
-
executions
|
|
199
|
+
executions,
|
|
173
200
|
rules: ruleDescriptors.length > 0 ? ruleDescriptors : undefined,
|
|
201
|
+
thymianFormatVersion: thymianFormat.toHash(),
|
|
174
202
|
}),
|
|
175
203
|
];
|
|
176
204
|
}
|
|
@@ -206,7 +234,7 @@ export function createHttpTesterPlugin(pluginName = '@thymian/plugin-http-tester
|
|
|
206
234
|
createContext: (rule, options) => new HttpTestApiContext(rule.meta.name, context, (options ?? {}).skipOrigins),
|
|
207
235
|
};
|
|
208
236
|
const ruleResults = await runRules(logger, rules, thymianFormat, rulesConfig, adapter);
|
|
209
|
-
ctx.reply(createRuns(pluginName, ruleResults, rules, thymianFormat));
|
|
237
|
+
ctx.reply(createRuns(pluginName, ruleResults, rules, thymianFormat, logger));
|
|
210
238
|
});
|
|
211
239
|
},
|
|
212
240
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,aAAa,EAKb,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EAGxB,wBAAwB,EAExB,0BAA0B,EAG1B,sBAAsB,EACtB,QAAQ,EAKR,gBAAgB,EAChB,aAAa,GAGd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,GAGnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,GAGnB,MAAM,4BAA4B,CAAC;AAEpC;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,SAAiD,EACjD,IAAU;IAEV,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,KAAK,EACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3E,GAAG,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;gBACrB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;KACc,CAAC;AAC5B,CAAC;AAED,sFAAsF;AACtF,SAAS,aAAa,CACpB,IAAsB,EACtB,SAAiB,EACjB,cAAuC,EACvC,IAAU,EACV,QAAkB;IAElB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY;SACvC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;SAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,oEAAoE;QACpE,OAAO,EAAE,CAAC,CAAC,OAAQ;QACnB,oEAAoE;QACpE,QAAQ,EAAE,CAAC,CAAC,QAAS;KACtB,CAAC,CAAC,CAAC;IAEN,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,QAAQ,SAAS,GAAG,CAAC,EAAE;QAC7B,QAAQ;QACR,QAAQ;QACR,gBAAgB,EACd,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;KAC7D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,IAAsB;IAC5C,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACpC,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,MAAM,KAAK,GACT,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;YACrC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC;AAcD;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAC5B,QAAsB,EACtB,OAAwB;IAExB,MAAM,oBAAoB,GACxB,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,UAAU,CACxB,UAAkB,EAClB,WAAsD,EACtD,QAAgB,EAAE,EAClB,aAA4B,EAC5B,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CACpE,WAAW,CACZ,EAAE,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;QAEhD,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,WAAW,EAAE,CAAC;gBACrD,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE;oBACnD,oEAAoE;oBACpE,qEAAqE;oBACrE,sEAAsE;oBACtE,MAAM,OAAO,GAAoB;wBAC/B,YAAY,EAAE,KAAK;wBACnB,WAAW,EAAE,KAAK;qBACnB,CAAC;oBACF,MAAM,UAAU,GAAG,CAAC,MAAoB,EAAQ,EAAE;wBAChD,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;4BACnC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;4BAC5B,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gCAC1C,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;4BACrD,CAAC;wBACH,CAAC;wBACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;4BACtC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gCACjC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;gCAC3B,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;oCACzC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;gCAC7D,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC;oBAEF,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,UAAU,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,aAAa,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CACjE,EAAE,CAAC;wBACF,UAAU,CAAC,MAAM,CAAC,CAAC;oBACrB,CAAC;oBAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;wBACnD,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,aAAa,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CACjE,CAAC;wBACF,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;4BACxC,UAAU,CAAC,MAAM,CAAC,CAAC;wBACrB,CAAC;wBAED,OAAO,aAAa,CAClB,IAAI,EACJ,SAAS,EACT,cAAc,EACd,IAAI,EACJ,cAAc,CAAC,IAAI,CAAC,CACrB,CAAC;oBACJ,CAAC,CAAC,CAAC;oBAEH,UAAU,CAAC,IAAI,CACb,uBAAuB,CAAC;wBACtB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC;wBAChD,KAAK;qBACN,CAAC,CACH,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,gBAAgB,GAAG,wBAAwB,CAC/C,MAAM,CAAC,QAAQ,EACf,aAAa,EACb,QAAQ,CACT,CAAC;YAEF,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAEnD,6EAA6E;YAC7E,MAAM,MAAM,GACV,MAAM,CAAC,SAAS,KAAK,SAAS;gBAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACnD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAEzD,MAAM,CAAC,IAAI,CACT,GAAG,UAAU,WAAW,QAAQ,oCAAoC,gBAAgB,CAAC,OAAO,gBAAgB,MAAM,CAAC,IAAI,aAAa,CACrI,CAAC;YAEF,UAAU,CAAC,IAAI,CACb,uBAAuB,CAAC;gBACtB,IAAI,EAAE,gBAAgB,CAAC,OAAO;gBAC9B,MAAM,EAAE,QAAQ;gBAChB,MAAM;gBACN,KAAK,EAAE,EAAE;aACV,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEzE,OAAO;QACL,aAAa,CAAC;YACZ,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAC1B,OAAO,EAAE,MAAM;YACf,UAAU;YACV,KAAK,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YAC/D,oBAAoB,EAAE,aAAa,CAAC,MAAM,EAAE;SAC7C,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAU,GAAG,6BAA6B;IAE1C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,WAAW,CAAC;SACzB;QACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;YAC1B,OAAO,CAAC,QAAQ,CACd,WAAW,EACX,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE;gBACjE,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,gBAAoC,CAAC;gBAEzC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;wBAC/B,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC;oBAChC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,IAAI,gBAAgB,CACxB,6DAA6D,SAAS,OAAQ,KAAe,CAAC,OAAO,EAAE,EACvG;4BACE,WAAW,EAAE;gCACX,6EAA6E;6BAC9E;yBACF,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,wBAAwB,CACtC,aAAa,EACb,MAAM,EACN,OAAO,EACP,gBAAgB,CACjB,CAAC;gBAEF,MAAM,OAAO,GAGT;oBACF,SAAS,EAAE,iBAAiB;oBAC5B,IAAI,EAAE,MAAM;oBACZ,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ;oBAClC,aAAa,EAAE,CACb,IAAU,EACV,OAA4C,EAC5C,EAAE,CACF,IAAI,kBAAkB,CACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,OAAO,EACP,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,CAC5B;iBACJ,CAAC;gBAEF,MAAM,WAAW,GAAG,MAAM,QAAQ,CAChC,MAAM,EACN,KAAK,EACL,aAAa,EACb,WAAW,EACX,OAAO,CACR,CAAC;gBAEF,GAAG,CAAC,KAAK,CACP,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAClE,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;AAEzD,eAAe,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thymian/plugin-http-tester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12-canary.20260709-74e687c",
|
|
4
4
|
"description": "Thymian plugin for runtime HTTP conformance testing against live API endpoints",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"bugs": {
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"!**/*.tsbuildinfo"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@thymian/core": "0.1.
|
|
44
|
+
"@thymian/core": "0.1.12-canary.20260709-74e687c",
|
|
45
45
|
"rxjs": "^7.8.2",
|
|
46
46
|
"tslib": "^2.3.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@thymian/core-testing": "0.1.
|
|
49
|
+
"@thymian/core-testing": "0.1.12-canary.20260709-74e687c"
|
|
50
50
|
}
|
|
51
51
|
}
|