@adonisjs/inertia
Version:
Official Inertia.js adapter for AdonisJS
48 lines (47 loc) • 1.83 kB
JavaScript
import { t as InertiaManager } from "../inertia_manager-BGHA4cDP.js";
import { t as InertiaHeaders } from "../headers-DafWEpBh.js";
import { t as debug_default } from "../debug-CBMTuPUm.js";
const MUTATION_METHODS = [
"PUT",
"PATCH",
"DELETE"
];
var BaseInertiaMiddleware = class {
getValidationErrors(ctx) {
if (!ctx.session) return {};
const inputErrors = ctx.session.flashMessages.get("inputErrorsBag", {});
const errors = Object.entries(inputErrors).reduce((result, [field, messages]) => {
result[field] = Array.isArray(messages) ? messages[0] : messages;
return result;
}, {});
const errorBag = ctx.request.header(InertiaHeaders.ErrorBag);
if (errorBag) return { [errorBag]: errors };
return errors;
}
async init(ctx) {
debug_default("initiating inertia");
ctx.inertia = (await ctx.containerResolver.make(InertiaManager)).createForRequest(ctx);
if (this.share) ctx.inertia.share(() => this.share(ctx));
}
dispose(ctx) {
const requestInfo = ctx.inertia.requestInfo();
if (!requestInfo.isInertiaRequest) return;
debug_default("disposing as inertia request");
ctx.response.header("Vary", InertiaHeaders.Inertia);
const method = ctx.request.method();
if (ctx.response.getStatus() === 302 && MUTATION_METHODS.includes(method)) {
debug_default("upgrading response status from 302 to 303");
ctx.response.status(303);
}
const version = ctx.inertia.getVersion();
const clientVersion = requestInfo.version ?? "";
if (method === "GET" && clientVersion !== version) {
debug_default("version mis-match. Reloading page");
if (ctx.session) ctx.session.reflash();
ctx.response.removeHeader(InertiaHeaders.Inertia);
ctx.response.header(InertiaHeaders.Location, ctx.request.url(true));
ctx.response.status(409);
}
}
};
export { BaseInertiaMiddleware as default };