@kb-labs/qa-entry 2.94.0 → 2.96.0
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/commands/baseline-diff.d.ts +14 -0
- package/dist/cli/commands/baseline-diff.js +40 -0
- package/dist/cli/commands/baseline-diff.js.map +1 -0
- package/dist/cli/commands/baseline-status.d.ts +10 -5
- package/dist/cli/commands/baseline-status.js +14 -17
- package/dist/cli/commands/baseline-status.js.map +1 -1
- package/dist/cli/commands/baseline-update.d.ts +10 -5
- package/dist/cli/commands/baseline-update.js +26 -18
- package/dist/cli/commands/baseline-update.js.map +1 -1
- package/dist/cli/commands/flags.d.ts +117 -132
- package/dist/cli/commands/flags.js +65 -79
- package/dist/cli/commands/flags.js.map +1 -1
- package/dist/cli/commands/qa-check.d.ts +13 -34
- package/dist/cli/commands/qa-check.js +26 -106
- package/dist/cli/commands/qa-check.js.map +1 -1
- package/dist/cli/commands/qa-gate.d.ts +19 -0
- package/dist/cli/commands/qa-gate.js +36 -0
- package/dist/cli/commands/qa-gate.js.map +1 -0
- package/dist/cli/commands/qa-history.d.ts +15 -5
- package/dist/cli/commands/qa-history.js +13 -24
- package/dist/cli/commands/qa-history.js.map +1 -1
- package/dist/cli/commands/qa-regressions.d.ts +10 -5
- package/dist/cli/commands/qa-regressions.js +15 -18
- package/dist/cli/commands/qa-regressions.js.map +1 -1
- package/dist/cli/commands/qa-run.d.ts +18 -11
- package/dist/cli/commands/qa-run.js +28 -141
- package/dist/cli/commands/qa-run.js.map +1 -1
- package/dist/cli/commands/qa-stats.d.ts +19 -0
- package/dist/cli/commands/qa-stats.js +43 -0
- package/dist/cli/commands/qa-stats.js.map +1 -0
- package/dist/cli/commands/qa-trends.d.ts +15 -5
- package/dist/cli/commands/qa-trends.js +15 -18
- package/dist/cli/commands/qa-trends.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +143 -291
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +74 -106
- package/dist/manifest.js +143 -291
- package/dist/manifest.js.map +1 -1
- package/dist/rest/handlers/baseline-diff-handler.d.ts +7 -27
- package/dist/rest/handlers/baseline-diff-handler.js +15 -41
- package/dist/rest/handlers/baseline-diff-handler.js.map +1 -1
- package/dist/rest/handlers/baseline-handler.d.ts +3 -13
- package/dist/rest/handlers/baseline-handler.js +10 -5
- package/dist/rest/handlers/baseline-handler.js.map +1 -1
- package/dist/rest/handlers/baseline-update-handler.d.ts +4 -14
- package/dist/rest/handlers/baseline-update-handler.js +15 -13
- package/dist/rest/handlers/baseline-update-handler.js.map +1 -1
- package/dist/rest/handlers/check-handler.d.ts +15 -0
- package/dist/rest/handlers/check-handler.js +28 -0
- package/dist/rest/handlers/check-handler.js.map +1 -0
- package/dist/rest/handlers/gate-handler.d.ts +13 -0
- package/dist/rest/handlers/gate-handler.js +28 -0
- package/dist/rest/handlers/gate-handler.js.map +1 -0
- package/dist/rest/handlers/history-handler.d.ts +3 -16
- package/dist/rest/handlers/history-handler.js +10 -11
- package/dist/rest/handlers/history-handler.js.map +1 -1
- package/dist/rest/handlers/package-timeline-handler.d.ts +5 -20
- package/dist/rest/handlers/package-timeline-handler.js +11 -7
- package/dist/rest/handlers/package-timeline-handler.js.map +1 -1
- package/dist/rest/handlers/regressions-handler.d.ts +2 -11
- package/dist/rest/handlers/regressions-handler.js +11 -5
- package/dist/rest/handlers/regressions-handler.js.map +1 -1
- package/dist/rest/handlers/run-handler.d.ts +10 -27
- package/dist/rest/handlers/run-handler.js +18 -63
- package/dist/rest/handlers/run-handler.js.map +1 -1
- package/dist/rest/handlers/{error-groups-handler.d.ts → stats-handler.d.ts} +5 -9
- package/dist/rest/handlers/stats-handler.js +21 -0
- package/dist/rest/handlers/stats-handler.js.map +1 -0
- package/dist/rest/handlers/summary-handler.d.ts +7 -20
- package/dist/rest/handlers/summary-handler.js +16 -26
- package/dist/rest/handlers/summary-handler.js.map +1 -1
- package/dist/rest/handlers/tasks-handler.d.ts +9 -0
- package/dist/rest/handlers/tasks-handler.js +38 -0
- package/dist/rest/handlers/tasks-handler.js.map +1 -0
- package/dist/rest/handlers/trends-handler.d.ts +4 -43
- package/dist/rest/handlers/trends-handler.js +11 -18
- package/dist/rest/handlers/trends-handler.js.map +1 -1
- package/dist/widgets/117.js +24 -1
- package/dist/widgets/{919.js → 215.js} +1 -1
- package/dist/widgets/370.js +1 -1
- package/dist/widgets/{805.js → 46.js} +92 -92
- package/dist/widgets/50.js +1 -1
- package/dist/widgets/62.js +96 -0
- package/dist/widgets/648.js +1 -0
- package/dist/widgets/669.js +1 -1
- package/dist/widgets/775.js +1 -1
- package/dist/widgets/78.js +1 -0
- package/dist/widgets/823.js +1 -0
- package/dist/widgets/968.js +2 -2
- package/dist/widgets/__federation_expose_QADashboard.js +1 -1
- package/dist/widgets/mf-manifest.json +32 -31
- package/dist/widgets/mf-stats.json +32 -31
- package/dist/widgets/remoteEntry.js +2 -2
- package/package.json +11 -8
- package/dist/cli/commands/qa-save.d.ts +0 -10
- package/dist/cli/commands/qa-save.js +0 -69
- package/dist/cli/commands/qa-save.js.map +0 -1
- package/dist/rest/handlers/details-handler.d.ts +0 -61
- package/dist/rest/handlers/details-handler.js +0 -70
- package/dist/rest/handlers/details-handler.js.map +0 -1
- package/dist/rest/handlers/error-groups-handler.js +0 -17
- package/dist/rest/handlers/error-groups-handler.js.map +0 -1
- package/dist/rest/handlers/latest-handler.d.ts +0 -22
- package/dist/rest/handlers/latest-handler.js +0 -17
- package/dist/rest/handlers/latest-handler.js.map +0 -1
- package/dist/rest/handlers/run-check-handler.d.ts +0 -20
- package/dist/rest/handlers/run-check-handler.js +0 -58
- package/dist/rest/handlers/run-check-handler.js.map +0 -1
- package/dist/widgets/418.js +0 -38
- package/dist/widgets/451.js +0 -1
- package/dist/widgets/694.js +0 -1
|
@@ -1,72 +1,27 @@
|
|
|
1
|
-
import { defineHandler, useConfig } from '@kb-labs/sdk';
|
|
2
|
-
import {
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { resolveDevkitBin, DevkitAdapter, SnapshotStore, captureGit } from '@kb-labs/qa-core';
|
|
3
|
+
import { DEFAULT_TASKS } from '@kb-labs/qa-contracts';
|
|
3
4
|
|
|
4
5
|
// src/rest/handlers/run-handler.ts
|
|
5
6
|
var run_handler_default = defineHandler({
|
|
6
7
|
async execute(ctx, input) {
|
|
7
|
-
const rootDir = ctx.cwd;
|
|
8
|
-
const startTime = Date.now();
|
|
9
|
-
const body = input.body;
|
|
10
|
-
let config;
|
|
11
8
|
try {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
const { tasks, save = true, runContext } = input.body ?? {};
|
|
10
|
+
const config = await useConfig();
|
|
11
|
+
const cwd = ctx.cwd;
|
|
12
|
+
const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);
|
|
13
|
+
const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });
|
|
14
|
+
const store = new SnapshotStore(cwd, config?.historyMaxEntries);
|
|
15
|
+
const effectiveTasks = tasks ?? config?.defaultTasks ?? [...DEFAULT_TASKS];
|
|
16
|
+
const git = await captureGit(ctx.api.shell, cwd);
|
|
17
|
+
const start = Date.now();
|
|
18
|
+
const raw = await adapter.run(effectiveTasks);
|
|
19
|
+
const durationMs = Date.now() - start;
|
|
20
|
+
const snap = save ? store.saveRun(raw, effectiveTasks, durationMs, git, runContext) : null;
|
|
21
|
+
return { snapshot: snap, raw, ok: raw.ok };
|
|
22
|
+
} catch (error) {
|
|
23
|
+
rethrowForRest(error);
|
|
19
24
|
}
|
|
20
|
-
const checks = config?.checks;
|
|
21
|
-
const { results } = await runQA({
|
|
22
|
-
rootDir,
|
|
23
|
-
skipChecks: body?.skipChecks,
|
|
24
|
-
packagesConfig: config?.packages,
|
|
25
|
-
checks
|
|
26
|
-
});
|
|
27
|
-
const hasFailed = Object.values(results).some((r) => r.failed.length > 0);
|
|
28
|
-
const status = hasFailed ? "failed" : "passed";
|
|
29
|
-
let entry = null;
|
|
30
|
-
if (body?.saveToHistory !== false) {
|
|
31
|
-
entry = createHistoryEntry(results, rootDir);
|
|
32
|
-
appendEntry(rootDir, entry);
|
|
33
|
-
}
|
|
34
|
-
const durationMs = Date.now() - startTime;
|
|
35
|
-
const analytics = ctx.platform.analytics;
|
|
36
|
-
if (analytics) {
|
|
37
|
-
for (const ct of Object.keys(results)) {
|
|
38
|
-
const r = results[ct];
|
|
39
|
-
await analytics.track("qa.check.completed", {
|
|
40
|
-
checkType: ct,
|
|
41
|
-
status: r.failed.length > 0 ? "failed" : "passed",
|
|
42
|
-
passed: r.passed.length,
|
|
43
|
-
failed: r.failed.length,
|
|
44
|
-
skipped: r.skipped.length,
|
|
45
|
-
gitCommit: entry?.git.commit,
|
|
46
|
-
gitBranch: entry?.git.branch
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const checkKeys = Object.keys(results);
|
|
50
|
-
await analytics.track("qa.run.completed", {
|
|
51
|
-
status,
|
|
52
|
-
...Object.fromEntries(checkKeys.flatMap((ct) => [
|
|
53
|
-
[`${ct}Passed`, results[ct].passed.length],
|
|
54
|
-
[`${ct}Failed`, results[ct].failed.length]
|
|
55
|
-
])),
|
|
56
|
-
totalPassed: checkKeys.reduce((s, ct) => s + results[ct].passed.length, 0),
|
|
57
|
-
totalFailed: checkKeys.reduce((s, ct) => s + results[ct].failed.length, 0),
|
|
58
|
-
totalSkipped: checkKeys.reduce((s, ct) => s + results[ct].skipped.length, 0),
|
|
59
|
-
gitCommit: entry?.git.commit,
|
|
60
|
-
gitBranch: entry?.git.branch,
|
|
61
|
-
durationMs
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
status,
|
|
66
|
-
results,
|
|
67
|
-
entry,
|
|
68
|
-
durationMs
|
|
69
|
-
};
|
|
70
25
|
}
|
|
71
26
|
});
|
|
72
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/run-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/run-handler.ts"],"names":[],"mappings":";;;;;AAUA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAoC;AACtE,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAO,IAAA,GAAO,IAAA,EAAM,YAAW,GAAI,KAAA,CAAM,QAAQ,EAAC;AAC1D,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAEhB,MAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,IAAI,aAAA,CAAc,EAAE,UAAA,EAAY,KAAK,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,CAAA;AAC3E,MAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAE9D,MAAA,MAAM,iBAAiB,KAAA,IAAS,MAAA,EAAQ,YAAA,IAAgB,CAAC,GAAG,aAAa,CAAA;AACzE,MAAA,MAAM,MAAM,MAAM,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAE/C,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAC5C,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAEhC,MAAA,MAAM,IAAA,GAAO,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,cAAA,EAAgB,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA,GAAI,IAAA;AACtF,MAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,GAAA,EAAK,EAAA,EAAI,IAAI,EAAA,EAAG;AAAA,IAC3C,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"run-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { DevkitAdapter, SnapshotStore, resolveDevkitBin, captureGit } from '@kb-labs/qa-core';\nimport { DEFAULT_TASKS, type QAPluginConfig } from '@kb-labs/qa-contracts';\n\ninterface RunBody {\n tasks?: string[];\n save?: boolean;\n runContext?: Record<string, unknown>;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<unknown, RunBody>) {\n try {\n const { tasks, save = true, runContext } = input.body ?? {};\n const config = await useConfig<QAPluginConfig>();\n const cwd = ctx.cwd;\n\n const binaryPath = resolveDevkitBin(cwd, config?.devkitPath);\n const adapter = new DevkitAdapter({ binaryPath, cwd, shell: ctx.api.shell });\n const store = new SnapshotStore(cwd, config?.historyMaxEntries);\n\n const effectiveTasks = tasks ?? config?.defaultTasks ?? [...DEFAULT_TASKS];\n const git = await captureGit(ctx.api.shell, cwd);\n\n const start = Date.now();\n const raw = await adapter.run(effectiveTasks);\n const durationMs = Date.now() - start;\n\n const snap = save ? store.saveRun(raw, effectiveTasks, durationMs, git, runContext) : null;\n return { snapshot: snap, raw, ok: raw.ok };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
|
|
2
3
|
import { RestInput } from '@kb-labs/sdk';
|
|
3
4
|
|
|
4
|
-
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
pattern: string;
|
|
9
|
-
packages: string[];
|
|
10
|
-
example: string;
|
|
11
|
-
}[];
|
|
12
|
-
ungrouped: number;
|
|
5
|
+
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, {
|
|
6
|
+
snapshot: null;
|
|
7
|
+
} | {
|
|
8
|
+
snapshot: _kb_labs_qa_contracts.StatsSnapshot;
|
|
13
9
|
}>;
|
|
14
10
|
|
|
15
11
|
export { _default as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { SnapshotStore } from '@kb-labs/qa-core';
|
|
3
|
+
|
|
4
|
+
// src/rest/handlers/stats-handler.ts
|
|
5
|
+
var stats_handler_default = defineHandler({
|
|
6
|
+
async execute(ctx, input) {
|
|
7
|
+
try {
|
|
8
|
+
const config = await useConfig();
|
|
9
|
+
const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
|
|
10
|
+
const snap = store.latestStats();
|
|
11
|
+
if (!snap) return { snapshot: null };
|
|
12
|
+
return { snapshot: snap };
|
|
13
|
+
} catch (error) {
|
|
14
|
+
rethrowForRest(error);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export { stats_handler_default as default };
|
|
20
|
+
//# sourceMappingURL=stats-handler.js.map
|
|
21
|
+
//# sourceMappingURL=stats-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/stats-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,wBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAClE,MAAA,MAAM,IAAA,GAAO,MAAM,WAAA,EAAY;AAE/B,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAE,UAAU,IAAA,EAAK;AACnC,MAAA,OAAO,EAAE,UAAU,IAAA,EAAK;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"stats-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n const snap = store.latestStats();\n\n if (!snap) return { snapshot: null };\n return { snapshot: snap };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
|
|
2
3
|
import { RestInput } from '@kb-labs/sdk';
|
|
3
4
|
|
|
4
|
-
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
message: string;
|
|
11
|
-
} | null;
|
|
12
|
-
checks: {
|
|
13
|
-
passed: number;
|
|
14
|
-
failed: number;
|
|
15
|
-
skipped: number;
|
|
16
|
-
checkType: string;
|
|
17
|
-
label: string;
|
|
18
|
-
total: number;
|
|
19
|
-
icon?: string | undefined;
|
|
20
|
-
}[];
|
|
21
|
-
hasBaseline: boolean;
|
|
22
|
-
baselineTimestamp: string | null;
|
|
23
|
-
historyCount: number;
|
|
5
|
+
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, {
|
|
6
|
+
latestRun: _kb_labs_qa_contracts.RunSnapshot | null;
|
|
7
|
+
latestCheck: _kb_labs_qa_contracts.CheckSnapshot | null;
|
|
8
|
+
latestStats: _kb_labs_qa_contracts.StatsSnapshot | null;
|
|
9
|
+
baseline: _kb_labs_qa_contracts.BaselineData | null;
|
|
10
|
+
defaultTasks: string[] | null;
|
|
24
11
|
}>;
|
|
25
12
|
|
|
26
13
|
export { _default as default };
|
|
@@ -1,32 +1,22 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
2
|
-
import {
|
|
3
|
-
import { getCheckIcon, getCheckLabel } from '@kb-labs/qa-contracts';
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { SnapshotStore } from '@kb-labs/qa-core';
|
|
4
3
|
|
|
5
4
|
// src/rest/handlers/summary-handler.ts
|
|
6
5
|
var summary_handler_default = defineHandler({
|
|
7
|
-
async execute(ctx,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
return {
|
|
22
|
-
status: latest?.status ?? "unknown",
|
|
23
|
-
lastRunAt: latest?.timestamp ?? null,
|
|
24
|
-
git: latest?.git ?? null,
|
|
25
|
-
checks,
|
|
26
|
-
hasBaseline: baseline !== null,
|
|
27
|
-
baselineTimestamp: baseline?.timestamp ?? null,
|
|
28
|
-
historyCount: history.length
|
|
29
|
-
};
|
|
6
|
+
async execute(ctx, input) {
|
|
7
|
+
try {
|
|
8
|
+
const config = await useConfig();
|
|
9
|
+
const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
|
|
10
|
+
return {
|
|
11
|
+
latestRun: store.latestRun(),
|
|
12
|
+
latestCheck: store.latestCheck(),
|
|
13
|
+
latestStats: store.latestStats(),
|
|
14
|
+
baseline: store.loadBaseline(),
|
|
15
|
+
defaultTasks: config?.defaultTasks ?? null
|
|
16
|
+
};
|
|
17
|
+
} catch (error) {
|
|
18
|
+
rethrowForRest(error);
|
|
19
|
+
}
|
|
30
20
|
}
|
|
31
21
|
});
|
|
32
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/summary-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/summary-handler.ts"],"names":[],"mappings":";;;;AAIA,IAAO,0BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAElE,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,QAC3B,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,QAC/B,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,QAC/B,QAAA,EAAU,MAAM,YAAA,EAAa;AAAA,QAC7B,YAAA,EAAc,QAAQ,YAAA,IAAgB;AAAA,OACxC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"summary-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore } from '@kb-labs/qa-core';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n\n return {\n latestRun: store.latestRun(),\n latestCheck: store.latestCheck(),\n latestStats: store.latestStats(),\n baseline: store.loadBaseline(),\n defaultTasks: config?.defaultTasks ?? null,\n };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
import { RestInput } from '@kb-labs/sdk';
|
|
3
|
+
|
|
4
|
+
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, unknown, unknown>, {
|
|
5
|
+
tasks: string[];
|
|
6
|
+
defaultTasks: string[] | null;
|
|
7
|
+
}>;
|
|
8
|
+
|
|
9
|
+
export { _default as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { existsSync, readFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { load } from 'js-yaml';
|
|
5
|
+
|
|
6
|
+
// src/rest/handlers/tasks-handler.ts
|
|
7
|
+
function readDevkitTasks(cwd) {
|
|
8
|
+
const configFile = join(cwd, "devkit.yaml");
|
|
9
|
+
if (!existsSync(configFile)) return [];
|
|
10
|
+
try {
|
|
11
|
+
const raw = load(readFileSync(configFile, "utf-8"));
|
|
12
|
+
const tasks = raw?.tasks;
|
|
13
|
+
if (tasks && typeof tasks === "object" && !Array.isArray(tasks)) {
|
|
14
|
+
return Object.keys(tasks);
|
|
15
|
+
}
|
|
16
|
+
} catch {
|
|
17
|
+
}
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
var tasks_handler_default = defineHandler({
|
|
21
|
+
async execute(ctx, input) {
|
|
22
|
+
try {
|
|
23
|
+
const config = await useConfig();
|
|
24
|
+
const devkitTasks = readDevkitTasks(ctx.cwd);
|
|
25
|
+
const defaultTasks = config?.defaultTasks ?? null;
|
|
26
|
+
return {
|
|
27
|
+
tasks: devkitTasks,
|
|
28
|
+
defaultTasks
|
|
29
|
+
};
|
|
30
|
+
} catch (error) {
|
|
31
|
+
rethrowForRest(error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export { tasks_handler_default as default };
|
|
37
|
+
//# sourceMappingURL=tasks-handler.js.map
|
|
38
|
+
//# sourceMappingURL=tasks-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/tasks-handler.ts"],"names":[],"mappings":";;;;;;AAMA,SAAS,gBAAgB,GAAA,EAAuB;AAC9C,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAK,aAAa,CAAA;AAC1C,EAAA,IAAI,CAAC,UAAA,CAAW,UAAU,CAAA,SAAU,EAAC;AAErC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,OAAO,CAAC,CAAA;AAClD,IAAA,MAAM,QAAQ,GAAA,EAAK,KAAA;AACnB,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,MAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,EAAC;AACV;AAEA,IAAO,wBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,IAAA;AAE7C,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,WAAA;AAAA,QACP;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"tasks-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { load } from 'js-yaml';\nimport { type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nfunction readDevkitTasks(cwd: string): string[] {\n const configFile = join(cwd, 'devkit.yaml');\n if (!existsSync(configFile)) return [];\n\n try {\n const raw = load(readFileSync(configFile, 'utf-8')) as Record<string, unknown>;\n const tasks = raw?.tasks;\n if (tasks && typeof tasks === 'object' && !Array.isArray(tasks)) {\n return Object.keys(tasks);\n }\n } catch {\n // malformed yaml — fall through\n }\n return [];\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const devkitTasks = readDevkitTasks(ctx.cwd);\n const defaultTasks = config?.defaultTasks ?? null;\n\n return {\n tasks: devkitTasks,\n defaultTasks,\n };\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
|
|
@@ -1,48 +1,9 @@
|
|
|
1
1
|
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
import * as _kb_labs_qa_contracts from '@kb-labs/qa-contracts';
|
|
2
3
|
import { RestInput } from '@kb-labs/sdk';
|
|
3
4
|
|
|
4
|
-
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
trends: {
|
|
8
|
-
checkType: string;
|
|
9
|
-
previous: number;
|
|
10
|
-
current: number;
|
|
11
|
-
delta: number;
|
|
12
|
-
trend: "regression" | "improvement" | "no-change";
|
|
13
|
-
label?: string | undefined;
|
|
14
|
-
icon?: string | undefined;
|
|
15
|
-
}[];
|
|
16
|
-
} | {
|
|
17
|
-
historyCount: number;
|
|
18
|
-
window: number;
|
|
19
|
-
trends: {
|
|
20
|
-
checkType: string;
|
|
21
|
-
previous: number;
|
|
22
|
-
current: number;
|
|
23
|
-
delta: number;
|
|
24
|
-
trend: "regression" | "improvement" | "no-change";
|
|
25
|
-
timeSeries: {
|
|
26
|
-
passed: number;
|
|
27
|
-
failed: number;
|
|
28
|
-
skipped: number;
|
|
29
|
-
timestamp: string;
|
|
30
|
-
gitCommit: string;
|
|
31
|
-
gitBranch: string;
|
|
32
|
-
gitMessage: string;
|
|
33
|
-
}[];
|
|
34
|
-
changelog: {
|
|
35
|
-
timestamp: string;
|
|
36
|
-
delta: number;
|
|
37
|
-
gitCommit: string;
|
|
38
|
-
gitMessage: string;
|
|
39
|
-
newFailures: string[];
|
|
40
|
-
fixed: string[];
|
|
41
|
-
}[];
|
|
42
|
-
velocity: number;
|
|
43
|
-
label?: string | undefined;
|
|
44
|
-
icon?: string | undefined;
|
|
45
|
-
}[];
|
|
46
|
-
}>;
|
|
5
|
+
declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<{
|
|
6
|
+
window?: string;
|
|
7
|
+
}, unknown, unknown>, _kb_labs_qa_contracts.TrendAnalysis>;
|
|
47
8
|
|
|
48
9
|
export { _default as default };
|
|
@@ -1,27 +1,20 @@
|
|
|
1
|
-
import { defineHandler } from '@kb-labs/sdk';
|
|
2
|
-
import {
|
|
1
|
+
import { defineHandler, useConfig, rethrowForRest } from '@kb-labs/sdk';
|
|
2
|
+
import { SnapshotStore, analyzeTrends } from '@kb-labs/qa-core';
|
|
3
3
|
import { TRENDS_WINDOW } from '@kb-labs/qa-contracts';
|
|
4
4
|
|
|
5
5
|
// src/rest/handlers/trends-handler.ts
|
|
6
6
|
var trends_handler_default = defineHandler({
|
|
7
7
|
async execute(ctx, input) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
8
|
+
try {
|
|
9
|
+
const config = await useConfig();
|
|
10
|
+
const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);
|
|
11
|
+
const window = Number(input.query?.window) || TRENDS_WINDOW;
|
|
12
|
+
const history = store.loadRunHistory();
|
|
13
|
+
const analysis = analyzeTrends(history, window);
|
|
14
|
+
return analysis;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
rethrowForRest(error);
|
|
18
17
|
}
|
|
19
|
-
const trends = analyzeTrends(history, window);
|
|
20
|
-
return {
|
|
21
|
-
trends,
|
|
22
|
-
historyCount: history.length,
|
|
23
|
-
window
|
|
24
|
-
};
|
|
25
18
|
}
|
|
26
19
|
});
|
|
27
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rest/handlers/trends-handler.ts"],"names":[
|
|
1
|
+
{"version":3,"sources":["../../../src/rest/handlers/trends-handler.ts"],"names":[],"mappings":";;;;;AAIA,IAAO,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAuC;AACzE,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAA0B;AAC/C,MAAA,MAAM,QAAQ,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,QAAQ,iBAAiB,CAAA;AAElE,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA,IAAK,aAAA;AAC9C,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,OAAA,EAAS,MAAM,CAAA;AAE9C,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"trends-handler.js","sourcesContent":["import { defineHandler, useConfig, rethrowForRest, type PluginContextV3, type RestInput } from '@kb-labs/sdk';\nimport { SnapshotStore, analyzeTrends } from '@kb-labs/qa-core';\nimport { TRENDS_WINDOW, type QAPluginConfig } from '@kb-labs/qa-contracts';\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput<{ window?: string }>) {\n try {\n const config = await useConfig<QAPluginConfig>();\n const store = new SnapshotStore(ctx.cwd, config?.historyMaxEntries);\n\n const window = Number(input.query?.window) || TRENDS_WINDOW;\n const history = store.loadRunHistory();\n const analysis = analyzeTrends(history, window);\n\n return analysis;\n } catch (error) {\n rethrowForRest(error);\n }\n },\n});\n"]}
|