next-safe-fetch
Version:
Type-safe server actions with middleware support
32 lines (31 loc) • 1.18 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSafeAction = exports.SafeActionBuilder = void 0;
class SafeActionBuilder {
setMiddleware(middleware) {
const builder = new SafeActionBuilder();
builder.middleware = middleware;
return builder;
}
create(schemaOrHandler, handler) {
if (!this.middleware) {
throw new Error("Middleware not configured. Call setMiddleware() before creating actions.");
}
if (typeof schemaOrHandler === "function") {
return async () => {
const context = await this.middleware();
return schemaOrHandler(context);
};
}
return async (data) => {
const validated = schemaOrHandler.safeParse(data);
if (!validated.success) {
throw new Error("Validation failed: " + JSON.stringify(validated.error));
}
const context = await this.middleware();
return handler(validated.data, context);
};
}
}
exports.SafeActionBuilder = SafeActionBuilder;
exports.createSafeAction = new SafeActionBuilder();
;