Some checks failed
Main Confidence / confidence (push) Failing after 45s
## Summary - introduce surface-aware compressed governance outcomes and reuse the shared truth/explanation seams for operator-first summaries - apply the compressed outcome hierarchy across baseline, evidence, review, review-pack, canonical review/evidence, and artifact-oriented operation-run surfaces - expand spec 214 fixtures and Pest coverage, and fix tenant-panel route assertions by generating explicit tenant-panel URLs in the affected Filament tests ## Validation - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` - focused governance compression suite from `specs/214-governance-outcome-compression/quickstart.md` passed (`68` tests, `445` assertions) - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/InventoryItemResourceTest.php tests/Feature/Filament/BackupSetUiEnforcementTest.php tests/Feature/Filament/RestoreRunUiEnforcementTest.php` passed (`18` tests, `81` assertions) Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #253
183 lines
7.5 KiB
Plaintext
183 lines
7.5 KiB
Plaintext
"use strict";
|
|
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
// file that has been converted to a CommonJS file using a Babel-
|
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
mod
|
|
));
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
var traceRequests_exports = {};
|
|
__export(traceRequests_exports, {
|
|
traceRequest: () => traceRequest,
|
|
traceRequests: () => traceRequests
|
|
});
|
|
module.exports = __toCommonJS(traceRequests_exports);
|
|
var import_path = __toESM(require("path"));
|
|
var import_traceUtils = require("./traceUtils");
|
|
var import_formatUtils = require("../../utils/isomorphic/formatUtils");
|
|
async function traceRequests(options) {
|
|
const trace = await (0, import_traceUtils.loadTrace)();
|
|
const model = trace.model;
|
|
let indexed = model.resources.map((r, i) => ({ resource: r, ordinal: i + 1 }));
|
|
if (options.grep) {
|
|
const pattern = new RegExp(options.grep, "i");
|
|
indexed = indexed.filter(({ resource: r }) => pattern.test(r.request.url));
|
|
}
|
|
if (options.method)
|
|
indexed = indexed.filter(({ resource: r }) => r.request.method.toLowerCase() === options.method.toLowerCase());
|
|
if (options.status) {
|
|
const code = parseInt(options.status, 10);
|
|
indexed = indexed.filter(({ resource: r }) => r.response.status === code);
|
|
}
|
|
if (options.failed)
|
|
indexed = indexed.filter(({ resource: r }) => r.response.status >= 400 || r.response.status === -1);
|
|
if (!indexed.length) {
|
|
console.log(" No network requests");
|
|
return;
|
|
}
|
|
console.log(` ${"#".padStart(4)} ${"Method".padEnd(8)} ${"Status".padEnd(8)} ${"Name".padEnd(45)} ${"Duration".padStart(10)} ${"Size".padStart(8)} ${"Route".padEnd(10)}`);
|
|
console.log(` ${"\u2500".repeat(4)} ${"\u2500".repeat(8)} ${"\u2500".repeat(8)} ${"\u2500".repeat(45)} ${"\u2500".repeat(10)} ${"\u2500".repeat(8)} ${"\u2500".repeat(10)}`);
|
|
for (const { resource: r, ordinal } of indexed) {
|
|
let name;
|
|
try {
|
|
const url = new URL(r.request.url);
|
|
name = url.pathname.substring(url.pathname.lastIndexOf("/") + 1);
|
|
if (!name)
|
|
name = url.host;
|
|
if (url.search)
|
|
name += url.search;
|
|
} catch {
|
|
name = r.request.url;
|
|
}
|
|
if (name.length > 45)
|
|
name = name.substring(0, 42) + "...";
|
|
const status = r.response.status > 0 ? String(r.response.status) : "ERR";
|
|
const size = r.response._transferSize > 0 ? r.response._transferSize : r.response.bodySize;
|
|
const route = formatRouteStatus(r);
|
|
console.log(` ${(ordinal + ".").padStart(4)} ${r.request.method.padEnd(8)} ${status.padEnd(8)} ${name.padEnd(45)} ${(0, import_formatUtils.msToString)(r.time).padStart(10)} ${bytesToString(size).padStart(8)} ${route.padEnd(10)}`);
|
|
}
|
|
}
|
|
async function traceRequest(requestId) {
|
|
const trace = await (0, import_traceUtils.loadTrace)();
|
|
const model = trace.model;
|
|
const ordinal = parseInt(requestId, 10);
|
|
const resource = !isNaN(ordinal) && ordinal >= 1 && ordinal <= model.resources.length ? model.resources[ordinal - 1] : void 0;
|
|
if (!resource) {
|
|
console.error(`Request '${requestId}' not found. Use 'trace requests' to see available request IDs.`);
|
|
process.exitCode = 1;
|
|
return;
|
|
}
|
|
const r = resource;
|
|
const status = r.response.status > 0 ? `${r.response.status} ${r.response.statusText}` : "ERR";
|
|
const size = r.response._transferSize > 0 ? r.response._transferSize : r.response.bodySize;
|
|
console.log(`
|
|
${r.request.method} ${r.request.url}
|
|
`);
|
|
console.log(" General");
|
|
console.log(` status: ${status}`);
|
|
console.log(` duration: ${(0, import_formatUtils.msToString)(r.time)}`);
|
|
console.log(` size: ${bytesToString(size)}`);
|
|
if (r.response.content.mimeType)
|
|
console.log(` type: ${r.response.content.mimeType}`);
|
|
const route = formatRouteStatus(r);
|
|
if (route)
|
|
console.log(` route: ${route}`);
|
|
if (r.serverIPAddress)
|
|
console.log(` server: ${r.serverIPAddress}${r._serverPort ? ":" + r._serverPort : ""}`);
|
|
if (r.response._failureText)
|
|
console.log(` error: ${r.response._failureText}`);
|
|
if (r.request.headers.length) {
|
|
console.log("\n Request headers");
|
|
for (const h of r.request.headers)
|
|
console.log(` ${h.name}: ${h.value}`);
|
|
}
|
|
if (r.request.postData) {
|
|
console.log("\n Request body");
|
|
const resource2 = r.request.postData._sha1 ?? r.request.postData._file;
|
|
if (resource2) {
|
|
console.log(` ${import_path.default.relative(process.cwd(), import_path.default.join(trace.model.traceUri, "resources", resource2))}`);
|
|
} else {
|
|
const text = r.request.postData.text.length > 2e3 ? r.request.postData.text.substring(0, 2e3) + "..." : r.request.postData.text;
|
|
console.log(` ${text}`);
|
|
}
|
|
}
|
|
if (r.response.headers.length) {
|
|
console.log("\n Response headers");
|
|
for (const h of r.response.headers)
|
|
console.log(` ${h.name}: ${h.value}`);
|
|
}
|
|
if (r.response.bodySize > 0) {
|
|
const resource2 = r.response.content._sha1 ?? r.response.content._file;
|
|
if (resource2) {
|
|
console.log("\n Response body");
|
|
console.log(` ${import_path.default.relative(process.cwd(), import_path.default.join(trace.model.traceUri, "resources", resource2))}`);
|
|
} else if (r.response.content.text) {
|
|
const text = r.response.content.text.length > 2e3 ? r.response.content.text.substring(0, 2e3) + "..." : r.response.content.text;
|
|
console.log("\n Response body");
|
|
console.log(` ${text}`);
|
|
}
|
|
}
|
|
if (r._securityDetails) {
|
|
console.log("\n Security");
|
|
if (r._securityDetails.protocol)
|
|
console.log(` protocol: ${r._securityDetails.protocol}`);
|
|
if (r._securityDetails.subjectName)
|
|
console.log(` subject: ${r._securityDetails.subjectName}`);
|
|
if (r._securityDetails.issuer)
|
|
console.log(` issuer: ${r._securityDetails.issuer}`);
|
|
}
|
|
console.log("");
|
|
}
|
|
function bytesToString(bytes) {
|
|
if (bytes < 0 || !isFinite(bytes))
|
|
return "-";
|
|
if (bytes === 0)
|
|
return "0";
|
|
if (bytes < 1e3)
|
|
return bytes.toFixed(0);
|
|
const kb = bytes / 1024;
|
|
if (kb < 1e3)
|
|
return kb.toFixed(1) + "K";
|
|
const mb = kb / 1024;
|
|
if (mb < 1e3)
|
|
return mb.toFixed(1) + "M";
|
|
const gb = mb / 1024;
|
|
return gb.toFixed(1) + "G";
|
|
}
|
|
function formatRouteStatus(r) {
|
|
if (r._wasAborted)
|
|
return "aborted";
|
|
if (r._wasContinued)
|
|
return "continued";
|
|
if (r._wasFulfilled)
|
|
return "fulfilled";
|
|
if (r._apiRequest)
|
|
return "api";
|
|
return "";
|
|
}
|
|
// Annotate the CommonJS export names for ESM import in node:
|
|
0 && (module.exports = {
|
|
traceRequest,
|
|
traceRequests
|
|
});
|